Linux v4.0.3 rebase
This commit is contained in:
parent
61ed7ccf88
commit
09b06469de
|
@ -0,0 +1,125 @@
|
|||
From e1e62b98ebddc3234f3259019d3236f66fc667f8 Mon Sep 17 00:00:00 2001
|
||||
From: Kailang Yang <kailang@realtek.com>
|
||||
Date: Wed, 8 Apr 2015 16:01:22 +0800
|
||||
Subject: [PATCH] ALSA: hda/realtek - Support Dell headset mode for ALC288
|
||||
|
||||
Dell create new platform with ALC288 codec.
|
||||
This patch will enable headset mode for Dino platform.
|
||||
|
||||
[slight code refactoring and compile fix by tiwai]
|
||||
|
||||
Signed-off-by: Kailang Yang <kailang@realtek.com>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
---
|
||||
sound/pci/hda/patch_realtek.c | 67 +++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 67 insertions(+)
|
||||
|
||||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
||||
index ceb599a..7b5c93e 100644
|
||||
--- a/sound/pci/hda/patch_realtek.c
|
||||
+++ b/sound/pci/hda/patch_realtek.c
|
||||
@@ -4121,6 +4121,29 @@ static void alc_fixup_headset_mode_alc255_no_hp_mic(struct hda_codec *codec,
|
||||
alc_fixup_headset_mode(codec, fix, action);
|
||||
}
|
||||
|
||||
+static void alc288_update_headset_jack_cb(struct hda_codec *codec,
|
||||
+ struct hda_jack_callback *jack)
|
||||
+{
|
||||
+ struct alc_spec *spec = codec->spec;
|
||||
+ int present;
|
||||
+
|
||||
+ alc_update_headset_jack_cb(codec, jack);
|
||||
+ /* Headset Mic enable or disable, only for Dell Dino */
|
||||
+ present = spec->gen.hp_jack_present ? 0x40 : 0;
|
||||
+ snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA,
|
||||
+ present);
|
||||
+}
|
||||
+
|
||||
+static void alc_fixup_headset_mode_dell_alc288(struct hda_codec *codec,
|
||||
+ const struct hda_fixup *fix, int action)
|
||||
+{
|
||||
+ alc_fixup_headset_mode(codec, fix, action);
|
||||
+ if (action == HDA_FIXUP_ACT_PROBE) {
|
||||
+ struct alc_spec *spec = codec->spec;
|
||||
+ spec->gen.hp_automute_hook = alc288_update_headset_jack_cb;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void alc_fixup_auto_mute_via_amp(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix, int action)
|
||||
{
|
||||
@@ -4460,6 +4483,9 @@ enum {
|
||||
ALC286_FIXUP_HP_GPIO_LED,
|
||||
ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY,
|
||||
ALC280_FIXUP_HP_DOCK_PINS,
|
||||
+ ALC288_FIXUP_DELL_HEADSET_MODE,
|
||||
+ ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
+ ALC288_FIXUP_DELL_XPS_13_GPIO6,
|
||||
};
|
||||
|
||||
static const struct hda_fixup alc269_fixups[] = {
|
||||
@@ -4948,6 +4974,33 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
.chained = true,
|
||||
.chain_id = ALC280_FIXUP_HP_GPIO4
|
||||
},
|
||||
+ [ALC288_FIXUP_DELL_HEADSET_MODE] = {
|
||||
+ .type = HDA_FIXUP_FUNC,
|
||||
+ .v.func = alc_fixup_headset_mode_dell_alc288,
|
||||
+ .chained = true,
|
||||
+ .chain_id = ALC255_FIXUP_DELL_WMI_MIC_MUTE_LED
|
||||
+ },
|
||||
+ [ALC288_FIXUP_DELL1_MIC_NO_PRESENCE] = {
|
||||
+ .type = HDA_FIXUP_PINS,
|
||||
+ .v.pins = (const struct hda_pintbl[]) {
|
||||
+ { 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
|
||||
+ { 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
|
||||
+ { }
|
||||
+ },
|
||||
+ .chained = true,
|
||||
+ .chain_id = ALC288_FIXUP_DELL_HEADSET_MODE
|
||||
+ },
|
||||
+ [ALC288_FIXUP_DELL_XPS_13_GPIO6] = {
|
||||
+ .type = HDA_FIXUP_VERBS,
|
||||
+ .v.verbs = (const struct hda_verb[]) {
|
||||
+ {0x01, AC_VERB_SET_GPIO_MASK, 0x40},
|
||||
+ {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x40},
|
||||
+ {0x01, AC_VERB_SET_GPIO_DATA, 0x00},
|
||||
+ { }
|
||||
+ },
|
||||
+ .chained = true,
|
||||
+ .chain_id = ALC288_FIXUP_DELL1_MIC_NO_PRESENCE
|
||||
+ },
|
||||
};
|
||||
|
||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
@@ -5174,6 +5227,13 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
|
||||
{0x1b, 0x411111f0}, \
|
||||
{0x1e, 0x411111f0}
|
||||
|
||||
+#define ALC288_STANDARD_PINS \
|
||||
+ {0x17, 0x411111f0}, \
|
||||
+ {0x18, 0x411111f0}, \
|
||||
+ {0x19, 0x411111f0}, \
|
||||
+ {0x1a, 0x411111f0}, \
|
||||
+ {0x1e, 0x411111f0}
|
||||
+
|
||||
#define ALC290_STANDARD_PINS \
|
||||
{0x12, 0x99a30130}, \
|
||||
{0x13, 0x40000000}, \
|
||||
@@ -5369,6 +5429,13 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
||||
{0x19, 0x03a11020},
|
||||
{0x1d, 0x40e00001},
|
||||
{0x21, 0x0321101f}),
|
||||
+ SND_HDA_PIN_QUIRK(0x10ec0288, 0x1028, "Dell", ALC288_FIXUP_DELL_XPS_13_GPIO6,
|
||||
+ ALC288_STANDARD_PINS,
|
||||
+ {0x12, 0x90a60120},
|
||||
+ {0x13, 0x40000000},
|
||||
+ {0x14, 0x90170110},
|
||||
+ {0x1d, 0x4076832d},
|
||||
+ {0x21, 0x0321101f}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
|
||||
ALC290_STANDARD_PINS,
|
||||
{0x14, 0x411111f0},
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -0,0 +1,181 @@
|
|||
From f3b703326541d0c1ce85f5e570f6d2b6bd4296ec Mon Sep 17 00:00:00 2001
|
||||
From: Kailang Yang <kailang@realtek.com>
|
||||
Date: Wed, 8 Apr 2015 15:01:17 +0800
|
||||
Subject: [PATCH] ALSA: hda/realtek - Support headset mode for ALC286/288
|
||||
|
||||
Support headset mode for ALC286 and ALC288 platforms.
|
||||
|
||||
Signed-off-by: Kailang Yang <kailang@realtek.com>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
---
|
||||
sound/pci/hda/patch_realtek.c | 77 +++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 77 insertions(+)
|
||||
|
||||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
||||
index 7f46d06..ceb599a 100644
|
||||
--- a/sound/pci/hda/patch_realtek.c
|
||||
+++ b/sound/pci/hda/patch_realtek.c
|
||||
@@ -3542,6 +3542,14 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x42a3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x76, 0x000e),
|
||||
WRITE_COEF(0x6c, 0x2400),
|
||||
@@ -3573,6 +3581,10 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3602,6 +3614,14 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
|
||||
WRITE_COEF(0x26, 0x008c),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0),
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0x0008),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0x2000),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x19, 0xa208),
|
||||
WRITE_COEF(0x2e, 0xacf0),
|
||||
@@ -3635,6 +3655,13 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_update_coef_idx(codec, 0x4f, 0x000c, 0);
|
||||
+ snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
@@ -3670,6 +3697,14 @@ static void alc_headset_mode_default(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x4ea3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xc400), /* Set to TRS type */
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x76, 0x000e),
|
||||
WRITE_COEF(0x6c, 0x2400),
|
||||
@@ -3699,6 +3734,11 @@ static void alc_headset_mode_default(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3727,6 +3767,13 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x4ea3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x6b, 0xd429),
|
||||
WRITE_COEF(0x76, 0x0008),
|
||||
@@ -3754,6 +3801,12 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xd400);
|
||||
+ msleep(300);
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3782,6 +3835,13 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x4ea3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x6b, 0xe429),
|
||||
WRITE_COEF(0x76, 0x0008),
|
||||
@@ -3809,6 +3869,12 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xe400);
|
||||
+ msleep(300);
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3833,6 +3899,10 @@ static void alc_determine_headset_type(struct hda_codec *codec)
|
||||
conteol) */
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xd400), /* Check Type */
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0293[] = {
|
||||
UPDATE_COEF(0x4a, 0x000f, 0x0008), /* Combo Jack auto detect */
|
||||
WRITE_COEF(0x45, 0xD429), /* Set to ctia type */
|
||||
@@ -3861,6 +3931,13 @@ static void alc_determine_headset_type(struct hda_codec *codec)
|
||||
val = alc_read_coef_idx(codec, 0x46);
|
||||
is_ctia = (val & 0x0070) == 0x0070;
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ msleep(350);
|
||||
+ val = alc_read_coef_idx(codec, 0x50);
|
||||
+ is_ctia = (val & 0x0070) == 0x0070;
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_write_coef_idx(codec, 0x6b, 0xd429);
|
||||
msleep(300);
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
From 25c1b8af5b11bd1dbd17d0c1212586bb56ec4efd Mon Sep 17 00:00:00 2001
|
||||
From: Laura Abbott <labbott@fedoraproject.org>
|
||||
Date: Fri, 8 May 2015 14:13:56 -0700
|
||||
Subject: [PATCH] HID: usbhid: Add HID_QUIRK_NOGET for Aten DVI KVM switch
|
||||
To: Jiri Kosina <jkosina@suse.cz>
|
||||
Cc: linux-input@vger.kernel.org
|
||||
Cc: linux-kernel@vger.kernel.org
|
||||
Cc: linux-usb@vger.kernel.org
|
||||
Cc: stephane.tranchemer@devinci.fr
|
||||
|
||||
Like other KVM switches, the Aten DVI KVM switch needs a
|
||||
quirk to avoid spewing errors:
|
||||
|
||||
[791759.606542] usb 1-5.4: input irq status -75 received
|
||||
[791759.614537] usb 1-5.4: input irq status -75 received
|
||||
[791759.622542] usb 1-5.4: input irq status -75 received
|
||||
|
||||
Add it.
|
||||
|
||||
Signed-off-by: Laura Abbott <labbott@fedoraproject.org>
|
||||
---
|
||||
drivers/hid/hid-ids.h | 1 +
|
||||
drivers/hid/usbhid/hid-quirks.c | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
|
||||
index 41f167e..7ce93d9 100644
|
||||
--- a/drivers/hid/hid-ids.h
|
||||
+++ b/drivers/hid/hid-ids.h
|
||||
@@ -164,6 +164,7 @@
|
||||
#define USB_DEVICE_ID_ATEN_2PORTKVM 0x2204
|
||||
#define USB_DEVICE_ID_ATEN_4PORTKVM 0x2205
|
||||
#define USB_DEVICE_ID_ATEN_4PORTKVMC 0x2208
|
||||
+#define USB_DEVICE_ID_ATEN_CS682 0x2213
|
||||
|
||||
#define USB_VENDOR_ID_ATMEL 0x03eb
|
||||
#define USB_DEVICE_ID_ATMEL_MULTITOUCH 0x211c
|
||||
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
|
||||
index a775143..4696895e 100644
|
||||
--- a/drivers/hid/usbhid/hid-quirks.c
|
||||
+++ b/drivers/hid/usbhid/hid-quirks.c
|
||||
@@ -61,6 +61,7 @@ static const struct hid_blacklist {
|
||||
{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET },
|
||||
+ { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS682, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FIGHTERSTICK, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_COMBATSTICK, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE, HID_QUIRK_NOGET },
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
From 0ce518efc8ddd9d2d45dcc2f14b20032d1e88946 Mon Sep 17 00:00:00 2001
|
||||
From: Hans Verkuil <hverkuil@xs4all.nl>
|
||||
Date: Fri, 24 Apr 2015 08:55:07 +0200
|
||||
Subject: [PATCH] cx18: add missing caps for the PCM video device
|
||||
|
||||
The cx18 PCM video device didn't have any capabilities set, which caused a warnings
|
||||
in the v4l2 core:
|
||||
|
||||
[ 6.229393] ------------[ cut here ]------------
|
||||
[ 6.229414] WARNING: CPU: 1 PID: 593 at
|
||||
drivers/media/v4l2-core/v4l2-ioctl.c:1025 v4l_querycap+0x41/0x70
|
||||
[videodev]()
|
||||
[ 6.229415] Modules linked in: cx18_alsa mxl5005s s5h1409
|
||||
tuner_simple tuner_types cs5345 tuner intel_rapl iosf_mbi
|
||||
x86_pkg_temp_thermal coretemp raid1 snd_hda_codec_realtek kvm_intel
|
||||
snd_hda_codec_generic snd_hda_codec_hdmi kvm snd_oxygen(+) snd_hda_intel
|
||||
snd_oxygen_lib snd_hda_controller snd_hda_codec snd_mpu401_uart iTCO_wdt
|
||||
snd_rawmidi iTCO_vendor_support snd_hwdep crct10dif_pclmul crc32_pclmul
|
||||
crc32c_intel snd_seq cx18 snd_seq_device ghash_clmulni_intel
|
||||
videobuf_vmalloc tveeprom cx2341x snd_pcm serio_raw videobuf_core vfat
|
||||
dvb_core fat v4l2_common snd_timer videodev snd lpc_ich i2c_i801 joydev
|
||||
mfd_core mei_me media soundcore tpm_infineon soc_button_array tpm_tis
|
||||
mei shpchp tpm nfsd auth_rpcgss nfs_acl lockd grace sunrpc binfmt_misc
|
||||
i915 nouveau mxm_wmi wmi e1000e ttm i2c_algo_bit drm_kms_helper
|
||||
[ 6.229444] drm ptp pps_core video
|
||||
[ 6.229446] CPU: 1 PID: 593 Comm: v4l_id Not tainted
|
||||
3.19.3-200.fc21.x86_64 #1
|
||||
[ 6.229447] Hardware name: Gigabyte Technology Co., Ltd.
|
||||
Z87-D3HP/Z87-D3HP-CF, BIOS F6 01/20/2014
|
||||
[ 6.229448] 0000000000000000 00000000d12b1131 ffff88042dacfc28
|
||||
ffffffff8176e215
|
||||
[ 6.229449] 0000000000000000 0000000000000000 ffff88042dacfc68
|
||||
ffffffff8109bc1a
|
||||
[ 6.229451] ffffffffa0594000 ffff88042dacfd90 0000000000000000
|
||||
ffffffffa04e2140
|
||||
[ 6.229452] Call Trace:
|
||||
[ 6.229466] [<ffffffff8176e215>] dump_stack+0x45/0x57
|
||||
[ 6.229469] [<ffffffff8109bc1a>] warn_slowpath_common+0x8a/0xc0
|
||||
[ 6.229472] [<ffffffff8109bd4a>] warn_slowpath_null+0x1a/0x20
|
||||
[ 6.229474] [<ffffffffa04ca401>] v4l_querycap+0x41/0x70 [videodev]
|
||||
[ 6.229477] [<ffffffffa04ca6cc>] __video_do_ioctl+0x29c/0x320 [videodev]
|
||||
[ 6.229479] [<ffffffff81227131>] ? do_last+0x2f1/0x1210
|
||||
[ 6.229491] [<ffffffffa04cc776>] video_usercopy+0x366/0x5d0 [videodev]
|
||||
[ 6.229494] [<ffffffffa04ca430>] ? v4l_querycap+0x70/0x70 [videodev]
|
||||
[ 6.229497] [<ffffffffa04cc9f5>] video_ioctl2+0x15/0x20 [videodev]
|
||||
[ 6.229499] [<ffffffffa04c6794>] v4l2_ioctl+0x164/0x180 [videodev]
|
||||
[ 6.229501] [<ffffffff8122e298>] do_vfs_ioctl+0x2f8/0x500
|
||||
[ 6.229502] [<ffffffff8122e521>] SyS_ioctl+0x81/0xa0
|
||||
[ 6.229505] [<ffffffff81774a09>] system_call_fastpath+0x12/0x17
|
||||
[ 6.229506] ---[ end trace dacd80d4b19277ea ]---
|
||||
|
||||
Added the necessary capabilities to stop this warning.
|
||||
|
||||
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
|
||||
Reported-by: Laura Abbott <labbott@redhat.com>
|
||||
Cc: <stable@vger.kernel.org> # for v3.19 and up
|
||||
---
|
||||
drivers/media/pci/cx18/cx18-streams.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/media/pci/cx18/cx18-streams.c b/drivers/media/pci/cx18/cx18-streams.c
|
||||
index c82d25d..c986084 100644
|
||||
--- a/drivers/media/pci/cx18/cx18-streams.c
|
||||
+++ b/drivers/media/pci/cx18/cx18-streams.c
|
||||
@@ -90,6 +90,7 @@ static struct {
|
||||
"encoder PCM audio",
|
||||
VFL_TYPE_GRABBER, CX18_V4L2_ENC_PCM_OFFSET,
|
||||
PCI_DMA_FROMDEVICE,
|
||||
+ V4L2_CAP_TUNER | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
|
||||
},
|
||||
{ /* CX18_ENC_STREAM_TYPE_IDX */
|
||||
"encoder IDX",
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
From fc7789f5d8061c8d26f2e9be9ce5bd91f5033479 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Robinson <pbrobinson@gmail.com>
|
||||
Date: Tue, 30 Dec 2014 07:32:03 +0000
|
||||
Subject: [PATCH] drivers/rtc/rtc-em3027.c: add device tree support
|
||||
|
||||
Set the of_match_table for this driver so that devices can be described
|
||||
in the device tree. This device is used in the Trimslice and is already
|
||||
defined in the Trimslice device tree.
|
||||
|
||||
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
drivers/rtc/rtc-em3027.c | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
diff --git a/drivers/rtc/rtc-em3027.c b/drivers/rtc/rtc-em3027.c
|
||||
index fccf366..7fbb051 100644
|
||||
--- a/drivers/rtc/rtc-em3027.c
|
||||
+++ b/drivers/rtc/rtc-em3027.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/rtc.h>
|
||||
#include <linux/bcd.h>
|
||||
#include <linux/module.h>
|
||||
+#include <linux/of.h>
|
||||
|
||||
/* Registers */
|
||||
#define EM3027_REG_ON_OFF_CTRL 0x00
|
||||
@@ -135,10 +136,21 @@ static struct i2c_device_id em3027_id[] = {
|
||||
{ "em3027", 0 },
|
||||
{ }
|
||||
};
|
||||
+MODULE_DEVICE_TABLE(i2c, em3027_id);
|
||||
+
|
||||
+#ifdef CONFIG_OF
|
||||
+static const struct of_device_id em3027_of_match[] = {
|
||||
+ { .compatible = "emmicro,em3027", },
|
||||
+ {}
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(of, em3027_of_match);
|
||||
+#endif
|
||||
|
||||
static struct i2c_driver em3027_driver = {
|
||||
.driver = {
|
||||
.name = "rtc-em3027",
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .of_match_table = of_match_ptr(em3027_of_match),
|
||||
},
|
||||
.probe = &em3027_probe,
|
||||
.id_table = em3027_id,
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
From 1f16ea294d2ef63013740f4c8539e430b6c12dff Mon Sep 17 00:00:00 2001
|
||||
From: Johannes Berg <johannes.berg@intel.com>
|
||||
Date: Fri, 6 Mar 2015 09:17:37 +0100
|
||||
Subject: [PATCH] iwlwifi: mvm: remove WARN_ON for invalid BA notification
|
||||
|
||||
The firmware frequently manages to trigger this, and there's
|
||||
no known driver workaround, so stop warning.
|
||||
|
||||
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||||
---
|
||||
drivers/net/wireless/iwlwifi/mvm/tx.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/iwlwifi/mvm/tx.c b/drivers/net/wireless/iwlwifi/mvm/tx.c
|
||||
index 07304e1..96a0540 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/mvm/tx.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/mvm/tx.c
|
||||
@@ -949,8 +949,10 @@ int iwl_mvm_rx_ba_notif(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb,
|
||||
mvmsta = iwl_mvm_sta_from_mac80211(sta);
|
||||
tid_data = &mvmsta->tid_data[tid];
|
||||
|
||||
- if (WARN_ONCE(tid_data->txq_id != scd_flow, "Q %d, tid %d, flow %d",
|
||||
- tid_data->txq_id, tid, scd_flow)) {
|
||||
+ if (tid_data->txq_id != scd_flow) {
|
||||
+ IWL_ERR(mvm,
|
||||
+ "invalid BA notification: Q %d, tid %d, flow %d\n",
|
||||
+ tid_data->txq_id, tid, scd_flow);
|
||||
rcu_read_unlock();
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -20,7 +20,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
|||
7 files changed, 69 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Documentation/x86/zero-page.txt b/Documentation/x86/zero-page.txt
|
||||
index 199f453cb4de..ec38acf00b40 100644
|
||||
index 82fbdbc1e0b0..a811210ad486 100644
|
||||
--- a/Documentation/x86/zero-page.txt
|
||||
+++ b/Documentation/x86/zero-page.txt
|
||||
@@ -30,6 +30,8 @@ Offset Proto Name Meaning
|
||||
|
@ -33,10 +33,10 @@ index 199f453cb4de..ec38acf00b40 100644
|
|||
290/040 ALL edd_mbr_sig_buffer EDD MBR signatures
|
||||
2D0/A00 ALL e820_map E820 memory map table
|
||||
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
|
||||
index 0dc9d0144a27..58273956750d 100644
|
||||
index b7d31ca55187..ab403a636357 100644
|
||||
--- a/arch/x86/Kconfig
|
||||
+++ b/arch/x86/Kconfig
|
||||
@@ -1660,6 +1660,16 @@ config EFI_MIXED
|
||||
@@ -1695,6 +1695,16 @@ config EFI_MIXED
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
|
@ -54,7 +54,7 @@ index 0dc9d0144a27..58273956750d 100644
|
|||
def_bool y
|
||||
prompt "Enable seccomp to safely compute untrusted bytecode"
|
||||
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
|
||||
index 92b9a5f2aed6..2192da755e34 100644
|
||||
index ef17683484e9..105e7360d747 100644
|
||||
--- a/arch/x86/boot/compressed/eboot.c
|
||||
+++ b/arch/x86/boot/compressed/eboot.c
|
||||
@@ -12,6 +12,7 @@
|
||||
|
@ -63,9 +63,9 @@ index 92b9a5f2aed6..2192da755e34 100644
|
|||
#include <asm/desc.h>
|
||||
+#include <asm/bootparam_utils.h>
|
||||
|
||||
#undef memcpy /* Use memcpy from misc.c */
|
||||
|
||||
@@ -828,6 +829,37 @@ out:
|
||||
#include "../string.h"
|
||||
#include "eboot.h"
|
||||
@@ -827,6 +828,37 @@ out:
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -103,7 +103,7 @@ index 92b9a5f2aed6..2192da755e34 100644
|
|||
/*
|
||||
* See if we have Graphics Output Protocol
|
||||
*/
|
||||
@@ -1407,6 +1439,10 @@ struct boot_params *efi_main(struct efi_config *c,
|
||||
@@ -1406,6 +1438,10 @@ struct boot_params *efi_main(struct efi_config *c,
|
||||
else
|
||||
setup_boot_services32(efi_early);
|
||||
|
||||
|
@ -129,10 +129,10 @@ index 225b0988043a..90dbfb73e11f 100644
|
|||
* The sentinel is set to a nonzero value (0xff) in header.S.
|
||||
*
|
||||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
|
||||
index ab4734e5411d..5d52d67d5097 100644
|
||||
index 0a2421cca01f..a3d8174dedf9 100644
|
||||
--- a/arch/x86/kernel/setup.c
|
||||
+++ b/arch/x86/kernel/setup.c
|
||||
@@ -1152,6 +1152,12 @@ void __init setup_arch(char **cmdline_p)
|
||||
@@ -1151,6 +1151,12 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
io_delay_init();
|
||||
|
||||
|
@ -146,7 +146,7 @@ index ab4734e5411d..5d52d67d5097 100644
|
|||
* Parse the ACPI tables for possible boot-time SMP configuration.
|
||||
*/
|
||||
diff --git a/include/linux/module.h b/include/linux/module.h
|
||||
index d4b96d6c926a..c47f75720dbd 100644
|
||||
index b033dab5c8bf..f526b6e02f59 100644
|
||||
--- a/include/linux/module.h
|
||||
+++ b/include/linux/module.h
|
||||
@@ -188,6 +188,12 @@ const struct exception_table_entry *search_exception_tables(unsigned long add);
|
||||
|
@ -163,10 +163,10 @@ index d4b96d6c926a..c47f75720dbd 100644
|
|||
|
||||
extern int modules_disabled; /* for sysctl */
|
||||
diff --git a/kernel/module.c b/kernel/module.c
|
||||
index 98c3d7955a51..6244f24abe27 100644
|
||||
index 0372c3961016..55dacebb687b 100644
|
||||
--- a/kernel/module.c
|
||||
+++ b/kernel/module.c
|
||||
@@ -3896,6 +3896,13 @@ void module_layout(struct module *mod,
|
||||
@@ -3909,6 +3909,13 @@ void module_layout(struct module *mod,
|
||||
EXPORT_SYMBOL(module_layout);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ Upstream-status: Fedora mustard
|
|||
7 files changed, 65 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
|
||||
index b40d6174242f..0ee7749bad74 100644
|
||||
index 26c5d54124c1..dab298f03a9c 100644
|
||||
--- a/arch/x86/kernel/setup.c
|
||||
+++ b/arch/x86/kernel/setup.c
|
||||
@@ -70,6 +70,11 @@
|
||||
|
@ -30,7 +30,7 @@ index b40d6174242f..0ee7749bad74 100644
|
|||
#include <video/edid.h>
|
||||
|
||||
#include <asm/mtrr.h>
|
||||
@@ -1277,6 +1282,37 @@ void __init i386_reserve_resources(void)
|
||||
@@ -1278,6 +1283,37 @@ void __init i386_reserve_resources(void)
|
||||
|
||||
#endif /* CONFIG_X86_32 */
|
||||
|
||||
|
@ -81,10 +81,10 @@ index 421e29e4cd81..61c1eb97806c 100644
|
|||
input_set_drvdata(udev->dev, udev);
|
||||
|
||||
diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
|
||||
index 42bad18c66c9..496e073b09d7 100644
|
||||
index 259a4d5a4e8f..512c21dcb86f 100644
|
||||
--- a/drivers/tty/sysrq.c
|
||||
+++ b/drivers/tty/sysrq.c
|
||||
@@ -463,6 +463,7 @@ static struct sysrq_key_op *sysrq_key_table[36] = {
|
||||
@@ -464,6 +464,7 @@ static struct sysrq_key_op *sysrq_key_table[36] = {
|
||||
&sysrq_showstate_blocked_op, /* w */
|
||||
/* x: May be registered on ppc/powerpc for xmon */
|
||||
/* x: May be registered on sparc64 for global PMU dump */
|
||||
|
@ -92,7 +92,7 @@ index 42bad18c66c9..496e073b09d7 100644
|
|||
NULL, /* x */
|
||||
/* y: May be registered on sparc64 for global register dump */
|
||||
NULL, /* y */
|
||||
@@ -506,7 +507,7 @@ static void __sysrq_put_key_op(int key, struct sysrq_key_op *op_p)
|
||||
@@ -507,7 +508,7 @@ static void __sysrq_put_key_op(int key, struct sysrq_key_op *op_p)
|
||||
sysrq_key_table[i] = op_p;
|
||||
}
|
||||
|
||||
|
@ -101,7 +101,7 @@ index 42bad18c66c9..496e073b09d7 100644
|
|||
{
|
||||
struct sysrq_key_op *op_p;
|
||||
int orig_log_level;
|
||||
@@ -526,11 +527,15 @@ void __handle_sysrq(int key, bool check_mask)
|
||||
@@ -527,11 +528,15 @@ void __handle_sysrq(int key, bool check_mask)
|
||||
|
||||
op_p = __sysrq_get_key_op(key);
|
||||
if (op_p) {
|
||||
|
@ -115,10 +115,10 @@ index 42bad18c66c9..496e073b09d7 100644
|
|||
*/
|
||||
- if (!check_mask || sysrq_on_mask(op_p->enable_mask)) {
|
||||
+ if (from == SYSRQ_FROM_KERNEL || sysrq_on_mask(op_p->enable_mask)) {
|
||||
printk("%s\n", op_p->action_msg);
|
||||
pr_cont("%s\n", op_p->action_msg);
|
||||
console_loglevel = orig_log_level;
|
||||
op_p->handler(key);
|
||||
@@ -562,7 +567,7 @@ void __handle_sysrq(int key, bool check_mask)
|
||||
@@ -563,7 +568,7 @@ void __handle_sysrq(int key, bool check_mask)
|
||||
void handle_sysrq(int key)
|
||||
{
|
||||
if (sysrq_on())
|
||||
|
@ -127,7 +127,7 @@ index 42bad18c66c9..496e073b09d7 100644
|
|||
}
|
||||
EXPORT_SYMBOL(handle_sysrq);
|
||||
|
||||
@@ -642,7 +647,7 @@ static void sysrq_do_reset(unsigned long _state)
|
||||
@@ -643,7 +648,7 @@ static void sysrq_do_reset(unsigned long _state)
|
||||
static void sysrq_handle_reset_request(struct sysrq_state *state)
|
||||
{
|
||||
if (state->reset_requested)
|
||||
|
@ -136,7 +136,7 @@ index 42bad18c66c9..496e073b09d7 100644
|
|||
|
||||
if (sysrq_reset_downtime_ms)
|
||||
mod_timer(&state->keyreset_timer,
|
||||
@@ -793,8 +798,10 @@ static bool sysrq_handle_keypress(struct sysrq_state *sysrq,
|
||||
@@ -794,8 +799,10 @@ static bool sysrq_handle_keypress(struct sysrq_state *sysrq,
|
||||
|
||||
default:
|
||||
if (sysrq->active && value && value != 2) {
|
||||
|
@ -148,7 +148,7 @@ index 42bad18c66c9..496e073b09d7 100644
|
|||
}
|
||||
break;
|
||||
}
|
||||
@@ -1089,7 +1096,7 @@ static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf,
|
||||
@@ -1090,7 +1097,7 @@ static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf,
|
||||
|
||||
if (get_user(c, buf))
|
||||
return -EFAULT;
|
||||
|
@ -215,7 +215,7 @@ index 387fa7d05c98..4b07e30b3279 100644
|
|||
int unregister_sysrq_key(int key, struct sysrq_key_op *op);
|
||||
struct sysrq_key_op *__sysrq_get_key_op(int key);
|
||||
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c
|
||||
index 60f6bb817f70..c0a20ee0ad96 100644
|
||||
index 4121345498e0..0ff3cef5df96 100644
|
||||
--- a/kernel/debug/kdb/kdb_main.c
|
||||
+++ b/kernel/debug/kdb/kdb_main.c
|
||||
@@ -1968,7 +1968,7 @@ static int kdb_sr(int argc, const char **argv)
|
||||
|
@ -228,7 +228,7 @@ index 60f6bb817f70..c0a20ee0ad96 100644
|
|||
|
||||
return 0;
|
||||
diff --git a/kernel/module.c b/kernel/module.c
|
||||
index 6244f24abe27..b77554170d76 100644
|
||||
index 55dacebb687b..9d4deeb9268e 100644
|
||||
--- a/kernel/module.c
|
||||
+++ b/kernel/module.c
|
||||
@@ -107,9 +107,9 @@ struct list_head *kdb_modules = &modules; /* kdb needs the list of modules */
|
||||
|
|
|
@ -20,7 +20,7 @@ Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
|||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
|
||||
index a93cefe0e522..00304f742eca 100644
|
||||
index e77658cd037c..8e9cb25f45cb 100644
|
||||
--- a/drivers/hid/hid-logitech-hidpp.c
|
||||
+++ b/drivers/hid/hid-logitech-hidpp.c
|
||||
@@ -28,6 +28,11 @@ MODULE_LICENSE("GPL");
|
||||
|
@ -35,7 +35,7 @@ index a93cefe0e522..00304f742eca 100644
|
|||
#define REPORT_ID_HIDPP_SHORT 0x10
|
||||
#define REPORT_ID_HIDPP_LONG 0x11
|
||||
|
||||
@@ -1159,6 +1164,11 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||
@@ -1188,6 +1193,11 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||
|
||||
hidpp->quirks = id->driver_data;
|
||||
|
||||
|
|
|
@ -0,0 +1,220 @@
|
|||
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
Date: Tue, 7 Apr 2015 16:30:01 -0700
|
||||
Subject: [PATCH] Input: atmel_mxt_ts - add support for Google Pixel 2
|
||||
|
||||
This change allows atmel_mxt_ts to bind to ACPI-enumerated devices in
|
||||
Google Pixel 2 (2015).
|
||||
|
||||
While newer version of ACPI standard allow use of device-tree-like
|
||||
properties in device descriptions, the version of ACPI implemented in
|
||||
Google BIOS does not support them, and we have to resort to DMI data to
|
||||
specify exact characteristics of the devices (touchpad vs. touchscreen,
|
||||
GPIO to button mapping, etc).
|
||||
|
||||
Pixel 1 continues to use i2c devices and platform data created by
|
||||
chromeos-laptop driver, since ACPI does not enumerate them.
|
||||
|
||||
Reviewed-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
|
||||
Tested-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/touchscreen/atmel_mxt_ts.c | 141 ++++++++++++++++++++++++++++---
|
||||
1 file changed, 130 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
index 2875ddf37289..40b98dda8f38 100644
|
||||
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
@@ -14,6 +14,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
+#include <linux/acpi.h>
|
||||
+#include <linux/dmi.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/completion.h>
|
||||
@@ -2371,7 +2373,7 @@ static void mxt_input_close(struct input_dev *dev)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
-static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
|
||||
+static const struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
|
||||
{
|
||||
struct mxt_platform_data *pdata;
|
||||
u32 *keymap;
|
||||
@@ -2379,7 +2381,7 @@ static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
|
||||
int proplen, i, ret;
|
||||
|
||||
if (!client->dev.of_node)
|
||||
- return ERR_PTR(-ENODEV);
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
|
||||
pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
|
||||
if (!pdata)
|
||||
@@ -2410,25 +2412,132 @@ static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
|
||||
return pdata;
|
||||
}
|
||||
#else
|
||||
-static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
|
||||
+static const struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
|
||||
{
|
||||
- dev_dbg(&client->dev, "No platform data specified\n");
|
||||
- return ERR_PTR(-EINVAL);
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#ifdef CONFIG_ACPI
|
||||
+
|
||||
+struct mxt_acpi_platform_data {
|
||||
+ const char *hid;
|
||||
+ struct mxt_platform_data pdata;
|
||||
+};
|
||||
+
|
||||
+static unsigned int samus_touchpad_buttons[] = {
|
||||
+ KEY_RESERVED,
|
||||
+ KEY_RESERVED,
|
||||
+ KEY_RESERVED,
|
||||
+ BTN_LEFT
|
||||
+};
|
||||
+
|
||||
+static struct mxt_acpi_platform_data samus_platform_data[] = {
|
||||
+ {
|
||||
+ /* Touchpad */
|
||||
+ .hid = "ATML0000",
|
||||
+ .pdata = {
|
||||
+ .t19_num_keys = ARRAY_SIZE(samus_touchpad_buttons),
|
||||
+ .t19_keymap = samus_touchpad_buttons,
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
+ /* Touchscreen */
|
||||
+ .hid = "ATML0001",
|
||||
+ },
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
+static const struct dmi_system_id mxt_dmi_table[] = {
|
||||
+ {
|
||||
+ /* 2015 Google Pixel */
|
||||
+ .ident = "Chromebook Pixel 2",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "Samus"),
|
||||
+ },
|
||||
+ .driver_data = samus_platform_data,
|
||||
+ },
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
+static const struct mxt_platform_data *mxt_parse_acpi(struct i2c_client *client)
|
||||
+{
|
||||
+ struct acpi_device *adev;
|
||||
+ const struct dmi_system_id *system_id;
|
||||
+ const struct mxt_acpi_platform_data *acpi_pdata;
|
||||
+
|
||||
+ /*
|
||||
+ * Ignore ACPI devices representing bootloader mode.
|
||||
+ *
|
||||
+ * This is a bit of a hack: Google Chromebook BIOS creates ACPI
|
||||
+ * devices for both application and bootloader modes, but we are
|
||||
+ * interested in application mode only (if device is in bootloader
|
||||
+ * mode we'll end up switching into application anyway). So far
|
||||
+ * application mode addresses were all above 0x40, so we'll use it
|
||||
+ * as a threshold.
|
||||
+ */
|
||||
+ if (client->addr < 0x40)
|
||||
+ return ERR_PTR(-ENXIO);
|
||||
+
|
||||
+ adev = ACPI_COMPANION(&client->dev);
|
||||
+ if (!adev)
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
+
|
||||
+ system_id = dmi_first_match(mxt_dmi_table);
|
||||
+ if (!system_id)
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
+
|
||||
+ acpi_pdata = system_id->driver_data;
|
||||
+ if (!acpi_pdata)
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
+
|
||||
+ while (acpi_pdata->hid) {
|
||||
+ if (!strcmp(acpi_device_hid(adev), acpi_pdata->hid))
|
||||
+ return &acpi_pdata->pdata;
|
||||
+
|
||||
+ acpi_pdata++;
|
||||
+ }
|
||||
+
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
+}
|
||||
+#else
|
||||
+static const struct mxt_platform_data *mxt_parse_acpi(struct i2c_client *client)
|
||||
+{
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
}
|
||||
#endif
|
||||
|
||||
+static const struct mxt_platform_data *
|
||||
+mxt_get_platform_data(struct i2c_client *client)
|
||||
+{
|
||||
+ const struct mxt_platform_data *pdata;
|
||||
+
|
||||
+ pdata = dev_get_platdata(&client->dev);
|
||||
+ if (pdata)
|
||||
+ return pdata;
|
||||
+
|
||||
+ pdata = mxt_parse_dt(client);
|
||||
+ if (!IS_ERR(pdata) || PTR_ERR(pdata) != -ENOENT)
|
||||
+ return pdata;
|
||||
+
|
||||
+ pdata = mxt_parse_acpi(client);
|
||||
+ if (!IS_ERR(pdata) || PTR_ERR(pdata) != -ENOENT)
|
||||
+ return pdata;
|
||||
+
|
||||
+ dev_err(&client->dev, "No platform data specified\n");
|
||||
+ return ERR_PTR(-EINVAL);
|
||||
+}
|
||||
+
|
||||
static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
||||
{
|
||||
struct mxt_data *data;
|
||||
const struct mxt_platform_data *pdata;
|
||||
int error;
|
||||
|
||||
- pdata = dev_get_platdata(&client->dev);
|
||||
- if (!pdata) {
|
||||
- pdata = mxt_parse_dt(client);
|
||||
- if (IS_ERR(pdata))
|
||||
- return PTR_ERR(pdata);
|
||||
- }
|
||||
+ pdata = mxt_get_platform_data(client);
|
||||
+ if (IS_ERR(pdata))
|
||||
+ return PTR_ERR(pdata);
|
||||
|
||||
data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);
|
||||
if (!data) {
|
||||
@@ -2536,6 +2645,15 @@ static const struct of_device_id mxt_of_match[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, mxt_of_match);
|
||||
|
||||
+#ifdef CONFIG_ACPI
|
||||
+static const struct acpi_device_id mxt_acpi_id[] = {
|
||||
+ { "ATML0000", 0 }, /* Touchpad */
|
||||
+ { "ATML0001", 0 }, /* Touchscreen */
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(acpi, mxt_acpi_id);
|
||||
+#endif
|
||||
+
|
||||
static const struct i2c_device_id mxt_id[] = {
|
||||
{ "qt602240_ts", 0 },
|
||||
{ "atmel_mxt_ts", 0 },
|
||||
@@ -2550,6 +2668,7 @@ static struct i2c_driver mxt_driver = {
|
||||
.name = "atmel_mxt_ts",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(mxt_of_match),
|
||||
+ .acpi_match_table = ACPI_PTR(mxt_acpi_id),
|
||||
.pm = &mxt_pm_ops,
|
||||
},
|
||||
.probe = mxt_probe,
|
|
@ -0,0 +1,512 @@
|
|||
From: Nick Dyer <nick.dyer@itdev.co.uk>
|
||||
Date: Mon, 6 Apr 2015 11:25:13 -0700
|
||||
Subject: [PATCH] Input: atmel_mxt_ts - implement support for T100 touch object
|
||||
|
||||
Add support for the new T100 object which replaces the previous T9
|
||||
multitouch touchscreen object in recent maXTouch devices. T100 provides
|
||||
improved reporting with selectable auxiliary information, and a type field
|
||||
for hover/stylus/glove reporting.
|
||||
|
||||
The hovering finger support was based on Chung-Yih's work in the ChromiumOS
|
||||
downstream kernel:
|
||||
|
||||
https://chromium-review.googlesource.com/#/c/219280/
|
||||
|
||||
Signed-off-by: Nick Dyer <nick.dyer@itdev.co.uk>
|
||||
Acked-by: Yufeng Shen <miletus@chromium.org>
|
||||
[javier: Factor out T9 and T100 init functions and rework hover support]
|
||||
Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/touchscreen/atmel_mxt_ts.c | 345 ++++++++++++++++++++++++++++---
|
||||
1 file changed, 318 insertions(+), 27 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
index 95ee92a91bd2..1b3b845d92f4 100644
|
||||
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/slab.h>
|
||||
+#include <asm/unaligned.h>
|
||||
|
||||
/* Version */
|
||||
#define MXT_VER_20 20
|
||||
@@ -79,6 +80,7 @@
|
||||
#define MXT_SPT_DIGITIZER_T43 43
|
||||
#define MXT_SPT_MESSAGECOUNT_T44 44
|
||||
#define MXT_SPT_CTECONFIG_T46 46
|
||||
+#define MXT_TOUCH_MULTITOUCHSCREEN_T100 100
|
||||
|
||||
/* MXT_GEN_MESSAGE_T5 object */
|
||||
#define MXT_RPTID_NOMSG 0xff
|
||||
@@ -185,6 +187,36 @@ struct t9_range {
|
||||
#define MXT_RESET_VALUE 0x01
|
||||
#define MXT_BACKUP_VALUE 0x55
|
||||
|
||||
+/* T100 Multiple Touch Touchscreen */
|
||||
+#define MXT_T100_CTRL 0
|
||||
+#define MXT_T100_CFG1 1
|
||||
+#define MXT_T100_TCHAUX 3
|
||||
+#define MXT_T100_XRANGE 13
|
||||
+#define MXT_T100_YRANGE 24
|
||||
+
|
||||
+#define MXT_T100_CFG_SWITCHXY BIT(5)
|
||||
+
|
||||
+#define MXT_T100_TCHAUX_VECT BIT(0)
|
||||
+#define MXT_T100_TCHAUX_AMPL BIT(1)
|
||||
+#define MXT_T100_TCHAUX_AREA BIT(2)
|
||||
+
|
||||
+#define MXT_T100_DETECT BIT(7)
|
||||
+#define MXT_T100_TYPE_MASK 0x70
|
||||
+
|
||||
+enum t100_type {
|
||||
+ MXT_T100_TYPE_FINGER = 1,
|
||||
+ MXT_T100_TYPE_PASSIVE_STYLUS = 2,
|
||||
+ MXT_T100_TYPE_HOVERING_FINGER = 4,
|
||||
+ MXT_T100_TYPE_GLOVE = 5,
|
||||
+ MXT_T100_TYPE_LARGE_TOUCH = 6,
|
||||
+};
|
||||
+
|
||||
+#define MXT_DISTANCE_ACTIVE_TOUCH 0
|
||||
+#define MXT_DISTANCE_HOVERING 1
|
||||
+
|
||||
+#define MXT_TOUCH_MAJOR_DEFAULT 1
|
||||
+#define MXT_PRESSURE_DEFAULT 1
|
||||
+
|
||||
/* Delay times */
|
||||
#define MXT_BACKUP_TIME 50 /* msec */
|
||||
#define MXT_RESET_TIME 200 /* msec */
|
||||
@@ -244,6 +276,9 @@ struct mxt_data {
|
||||
unsigned int max_y;
|
||||
bool in_bootloader;
|
||||
u16 mem_size;
|
||||
+ u8 t100_aux_ampl;
|
||||
+ u8 t100_aux_area;
|
||||
+ u8 t100_aux_vect;
|
||||
u8 max_reportid;
|
||||
u32 config_crc;
|
||||
u32 info_crc;
|
||||
@@ -253,6 +288,7 @@ struct mxt_data {
|
||||
bool update_input;
|
||||
u8 last_message_count;
|
||||
u8 num_touchids;
|
||||
+ u8 multitouch;
|
||||
|
||||
/* Cached parameters from object table */
|
||||
u16 T5_address;
|
||||
@@ -264,6 +300,8 @@ struct mxt_data {
|
||||
u8 T9_reportid_max;
|
||||
u8 T19_reportid;
|
||||
u16 T44_address;
|
||||
+ u8 T100_reportid_min;
|
||||
+ u8 T100_reportid_max;
|
||||
|
||||
/* for fw update in bootloader */
|
||||
struct completion bl_completion;
|
||||
@@ -771,6 +809,114 @@ static void mxt_proc_t9_message(struct mxt_data *data, u8 *message)
|
||||
data->update_input = true;
|
||||
}
|
||||
|
||||
+static void mxt_proc_t100_message(struct mxt_data *data, u8 *message)
|
||||
+{
|
||||
+ struct device *dev = &data->client->dev;
|
||||
+ struct input_dev *input_dev = data->input_dev;
|
||||
+ int id;
|
||||
+ u8 status;
|
||||
+ u8 type = 0;
|
||||
+ u16 x;
|
||||
+ u16 y;
|
||||
+ int distance = 0;
|
||||
+ int tool = 0;
|
||||
+ u8 major = 0;
|
||||
+ u8 pressure = 0;
|
||||
+ u8 orientation = 0;
|
||||
+
|
||||
+ id = message[0] - data->T100_reportid_min - 2;
|
||||
+
|
||||
+ /* ignore SCRSTATUS events */
|
||||
+ if (id < 0)
|
||||
+ return;
|
||||
+
|
||||
+ status = message[1];
|
||||
+ x = get_unaligned_le16(&message[2]);
|
||||
+ y = get_unaligned_le16(&message[4]);
|
||||
+
|
||||
+ if (status & MXT_T100_DETECT) {
|
||||
+ type = (status & MXT_T100_TYPE_MASK) >> 4;
|
||||
+
|
||||
+ switch (type) {
|
||||
+ case MXT_T100_TYPE_HOVERING_FINGER:
|
||||
+ tool = MT_TOOL_FINGER;
|
||||
+ distance = MXT_DISTANCE_HOVERING;
|
||||
+
|
||||
+ if (data->t100_aux_vect)
|
||||
+ orientation = message[data->t100_aux_vect];
|
||||
+
|
||||
+ break;
|
||||
+
|
||||
+ case MXT_T100_TYPE_FINGER:
|
||||
+ case MXT_T100_TYPE_GLOVE:
|
||||
+ tool = MT_TOOL_FINGER;
|
||||
+ distance = MXT_DISTANCE_ACTIVE_TOUCH;
|
||||
+
|
||||
+ if (data->t100_aux_area)
|
||||
+ major = message[data->t100_aux_area];
|
||||
+
|
||||
+ if (data->t100_aux_ampl)
|
||||
+ pressure = message[data->t100_aux_ampl];
|
||||
+
|
||||
+ if (data->t100_aux_vect)
|
||||
+ orientation = message[data->t100_aux_vect];
|
||||
+
|
||||
+ break;
|
||||
+
|
||||
+ case MXT_T100_TYPE_PASSIVE_STYLUS:
|
||||
+ tool = MT_TOOL_PEN;
|
||||
+
|
||||
+ /*
|
||||
+ * Passive stylus is reported with size zero so
|
||||
+ * hardcode.
|
||||
+ */
|
||||
+ major = MXT_TOUCH_MAJOR_DEFAULT;
|
||||
+
|
||||
+ if (data->t100_aux_ampl)
|
||||
+ pressure = message[data->t100_aux_ampl];
|
||||
+
|
||||
+ break;
|
||||
+
|
||||
+ case MXT_T100_TYPE_LARGE_TOUCH:
|
||||
+ /* Ignore suppressed touch */
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ dev_dbg(dev, "Unexpected T100 type\n");
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * Values reported should be non-zero if tool is touching the
|
||||
+ * device
|
||||
+ */
|
||||
+ if (!pressure && type != MXT_T100_TYPE_HOVERING_FINGER)
|
||||
+ pressure = MXT_PRESSURE_DEFAULT;
|
||||
+
|
||||
+ input_mt_slot(input_dev, id);
|
||||
+
|
||||
+ if (status & MXT_T100_DETECT) {
|
||||
+ dev_dbg(dev, "[%u] type:%u x:%u y:%u a:%02X p:%02X v:%02X\n",
|
||||
+ id, type, x, y, major, pressure, orientation);
|
||||
+
|
||||
+ input_mt_report_slot_state(input_dev, tool, 1);
|
||||
+ input_report_abs(input_dev, ABS_MT_POSITION_X, x);
|
||||
+ input_report_abs(input_dev, ABS_MT_POSITION_Y, y);
|
||||
+ input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, major);
|
||||
+ input_report_abs(input_dev, ABS_MT_PRESSURE, pressure);
|
||||
+ input_report_abs(input_dev, ABS_MT_DISTANCE, distance);
|
||||
+ input_report_abs(input_dev, ABS_MT_ORIENTATION, orientation);
|
||||
+ } else {
|
||||
+ dev_dbg(dev, "[%u] release\n", id);
|
||||
+
|
||||
+ /* close out slot */
|
||||
+ input_mt_report_slot_state(input_dev, 0, 0);
|
||||
+ }
|
||||
+
|
||||
+ data->update_input = true;
|
||||
+}
|
||||
+
|
||||
static int mxt_proc_message(struct mxt_data *data, u8 *message)
|
||||
{
|
||||
u8 report_id = message[0];
|
||||
@@ -786,9 +932,12 @@ static int mxt_proc_message(struct mxt_data *data, u8 *message)
|
||||
* is not yet registered.
|
||||
*/
|
||||
mxt_dump_message(data, message);
|
||||
- } else if (report_id >= data->T9_reportid_min
|
||||
- && report_id <= data->T9_reportid_max) {
|
||||
+ } else if (report_id >= data->T9_reportid_min &&
|
||||
+ report_id <= data->T9_reportid_max) {
|
||||
mxt_proc_t9_message(data, message);
|
||||
+ } else if (report_id >= data->T100_reportid_min &&
|
||||
+ report_id <= data->T100_reportid_max) {
|
||||
+ mxt_proc_t100_message(data, message);
|
||||
} else if (report_id == data->T19_reportid) {
|
||||
mxt_input_button(data, message);
|
||||
data->update_input = true;
|
||||
@@ -1411,6 +1560,8 @@ static void mxt_free_object_table(struct mxt_data *data)
|
||||
data->T9_reportid_max = 0;
|
||||
data->T19_reportid = 0;
|
||||
data->T44_address = 0;
|
||||
+ data->T100_reportid_min = 0;
|
||||
+ data->T100_reportid_max = 0;
|
||||
data->max_reportid = 0;
|
||||
}
|
||||
|
||||
@@ -1487,6 +1638,7 @@ static int mxt_get_object_table(struct mxt_data *data)
|
||||
data->T7_address = object->start_address;
|
||||
break;
|
||||
case MXT_TOUCH_MULTI_T9:
|
||||
+ data->multitouch = MXT_TOUCH_MULTI_T9;
|
||||
data->T9_reportid_min = min_id;
|
||||
data->T9_reportid_max = max_id;
|
||||
data->num_touchids = object->num_report_ids
|
||||
@@ -1498,6 +1650,13 @@ static int mxt_get_object_table(struct mxt_data *data)
|
||||
case MXT_SPT_GPIOPWM_T19:
|
||||
data->T19_reportid = min_id;
|
||||
break;
|
||||
+ case MXT_TOUCH_MULTITOUCHSCREEN_T100:
|
||||
+ data->multitouch = MXT_TOUCH_MULTITOUCHSCREEN_T100;
|
||||
+ data->T100_reportid_min = min_id;
|
||||
+ data->T100_reportid_max = max_id;
|
||||
+ /* first two report IDs reserved */
|
||||
+ data->num_touchids = object->num_report_ids - 2;
|
||||
+ break;
|
||||
}
|
||||
|
||||
end_address = object->start_address
|
||||
@@ -1582,10 +1741,88 @@ static int mxt_read_t9_resolution(struct mxt_data *data)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int mxt_read_t100_config(struct mxt_data *data)
|
||||
+{
|
||||
+ struct i2c_client *client = data->client;
|
||||
+ int error;
|
||||
+ struct mxt_object *object;
|
||||
+ u16 range_x, range_y;
|
||||
+ u8 cfg, tchaux;
|
||||
+ u8 aux;
|
||||
+
|
||||
+ object = mxt_get_object(data, MXT_TOUCH_MULTITOUCHSCREEN_T100);
|
||||
+ if (!object)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ error = __mxt_read_reg(client,
|
||||
+ object->start_address + MXT_T100_XRANGE,
|
||||
+ sizeof(range_x), &range_x);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+
|
||||
+ le16_to_cpus(&range_x);
|
||||
+
|
||||
+ error = __mxt_read_reg(client,
|
||||
+ object->start_address + MXT_T100_YRANGE,
|
||||
+ sizeof(range_y), &range_y);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+
|
||||
+ le16_to_cpus(&range_y);
|
||||
+
|
||||
+ error = __mxt_read_reg(client,
|
||||
+ object->start_address + MXT_T100_CFG1,
|
||||
+ 1, &cfg);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+
|
||||
+ error = __mxt_read_reg(client,
|
||||
+ object->start_address + MXT_T100_TCHAUX,
|
||||
+ 1, &tchaux);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+
|
||||
+ /* Handle default values */
|
||||
+ if (range_x == 0)
|
||||
+ range_x = 1023;
|
||||
+
|
||||
+ if (range_y == 0)
|
||||
+ range_y = 1023;
|
||||
+
|
||||
+ if (cfg & MXT_T100_CFG_SWITCHXY) {
|
||||
+ data->max_x = range_y;
|
||||
+ data->max_y = range_x;
|
||||
+ } else {
|
||||
+ data->max_x = range_x;
|
||||
+ data->max_y = range_y;
|
||||
+ }
|
||||
+
|
||||
+ /* allocate aux bytes */
|
||||
+ aux = 6;
|
||||
+
|
||||
+ if (tchaux & MXT_T100_TCHAUX_VECT)
|
||||
+ data->t100_aux_vect = aux++;
|
||||
+
|
||||
+ if (tchaux & MXT_T100_TCHAUX_AMPL)
|
||||
+ data->t100_aux_ampl = aux++;
|
||||
+
|
||||
+ if (tchaux & MXT_T100_TCHAUX_AREA)
|
||||
+ data->t100_aux_area = aux++;
|
||||
+
|
||||
+ dev_dbg(&client->dev,
|
||||
+ "T100 aux mappings vect:%u ampl:%u area:%u\n",
|
||||
+ data->t100_aux_vect, data->t100_aux_ampl, data->t100_aux_area);
|
||||
+
|
||||
+ dev_info(&client->dev,
|
||||
+ "T100 Touchscreen size X%uY%u\n", data->max_x, data->max_y);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int mxt_input_open(struct input_dev *dev);
|
||||
static void mxt_input_close(struct input_dev *dev);
|
||||
|
||||
-static int mxt_initialize_t9_input_device(struct mxt_data *data)
|
||||
+static int mxt_initialize_input_device(struct mxt_data *data)
|
||||
{
|
||||
struct device *dev = &data->client->dev;
|
||||
const struct mxt_platform_data *pdata = data->pdata;
|
||||
@@ -1595,9 +1832,25 @@ static int mxt_initialize_t9_input_device(struct mxt_data *data)
|
||||
unsigned int mt_flags = 0;
|
||||
int i;
|
||||
|
||||
- error = mxt_read_t9_resolution(data);
|
||||
- if (error)
|
||||
- dev_warn(dev, "Failed to initialize T9 resolution\n");
|
||||
+ switch (data->multitouch) {
|
||||
+ case MXT_TOUCH_MULTI_T9:
|
||||
+ num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1;
|
||||
+ error = mxt_read_t9_resolution(data);
|
||||
+ if (error)
|
||||
+ dev_warn(dev, "Failed to initialize T9 resolution\n");
|
||||
+ break;
|
||||
+
|
||||
+ case MXT_TOUCH_MULTITOUCHSCREEN_T100:
|
||||
+ num_mt_slots = data->num_touchids;
|
||||
+ error = mxt_read_t100_config(data);
|
||||
+ if (error)
|
||||
+ dev_warn(dev, "Failed to read T100 config\n");
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ dev_err(dev, "Invalid multitouch object\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
|
||||
input_dev = input_allocate_device();
|
||||
if (!input_dev) {
|
||||
@@ -1612,9 +1865,7 @@ static int mxt_initialize_t9_input_device(struct mxt_data *data)
|
||||
input_dev->open = mxt_input_open;
|
||||
input_dev->close = mxt_input_close;
|
||||
|
||||
- __set_bit(EV_ABS, input_dev->evbit);
|
||||
- __set_bit(EV_KEY, input_dev->evbit);
|
||||
- __set_bit(BTN_TOUCH, input_dev->keybit);
|
||||
+ input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
|
||||
|
||||
if (pdata->t19_num_keys) {
|
||||
__set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
|
||||
@@ -1637,29 +1888,67 @@ static int mxt_initialize_t9_input_device(struct mxt_data *data)
|
||||
}
|
||||
|
||||
/* For single touch */
|
||||
- input_set_abs_params(input_dev, ABS_X,
|
||||
- 0, data->max_x, 0, 0);
|
||||
- input_set_abs_params(input_dev, ABS_Y,
|
||||
- 0, data->max_y, 0, 0);
|
||||
- input_set_abs_params(input_dev, ABS_PRESSURE,
|
||||
- 0, 255, 0, 0);
|
||||
+ input_set_abs_params(input_dev, ABS_X, 0, data->max_x, 0, 0);
|
||||
+ input_set_abs_params(input_dev, ABS_Y, 0, data->max_y, 0, 0);
|
||||
+
|
||||
+ if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
|
||||
+ (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
|
||||
+ data->t100_aux_ampl)) {
|
||||
+ input_set_abs_params(input_dev, ABS_PRESSURE, 0, 255, 0, 0);
|
||||
+ }
|
||||
|
||||
/* For multi touch */
|
||||
- num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1;
|
||||
error = input_mt_init_slots(input_dev, num_mt_slots, mt_flags);
|
||||
if (error) {
|
||||
dev_err(dev, "Error %d initialising slots\n", error);
|
||||
goto err_free_mem;
|
||||
}
|
||||
|
||||
- input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
|
||||
- 0, MXT_MAX_AREA, 0, 0);
|
||||
+ if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100) {
|
||||
+ input_set_abs_params(input_dev, ABS_MT_TOOL_TYPE,
|
||||
+ 0, MT_TOOL_MAX, 0, 0);
|
||||
+ input_set_abs_params(input_dev, ABS_MT_DISTANCE,
|
||||
+ MXT_DISTANCE_ACTIVE_TOUCH,
|
||||
+ MXT_DISTANCE_HOVERING,
|
||||
+ 0, 0);
|
||||
+ }
|
||||
+
|
||||
input_set_abs_params(input_dev, ABS_MT_POSITION_X,
|
||||
0, data->max_x, 0, 0);
|
||||
input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
|
||||
0, data->max_y, 0, 0);
|
||||
- input_set_abs_params(input_dev, ABS_MT_PRESSURE,
|
||||
- 0, 255, 0, 0);
|
||||
+
|
||||
+ if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
|
||||
+ (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
|
||||
+ data->t100_aux_area)) {
|
||||
+ input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
|
||||
+ 0, MXT_MAX_AREA, 0, 0);
|
||||
+ }
|
||||
+
|
||||
+ if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
|
||||
+ (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
|
||||
+ data->t100_aux_ampl)) {
|
||||
+ input_set_abs_params(input_dev, ABS_MT_PRESSURE,
|
||||
+ 0, 255, 0, 0);
|
||||
+ }
|
||||
+
|
||||
+ if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
|
||||
+ data->t100_aux_vect) {
|
||||
+ input_set_abs_params(input_dev, ABS_MT_ORIENTATION,
|
||||
+ 0, 255, 0, 0);
|
||||
+ }
|
||||
+
|
||||
+ if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
|
||||
+ data->t100_aux_ampl) {
|
||||
+ input_set_abs_params(input_dev, ABS_MT_PRESSURE,
|
||||
+ 0, 255, 0, 0);
|
||||
+ }
|
||||
+
|
||||
+ if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
|
||||
+ data->t100_aux_vect) {
|
||||
+ input_set_abs_params(input_dev, ABS_MT_ORIENTATION,
|
||||
+ 0, 255, 0, 0);
|
||||
+ }
|
||||
|
||||
input_set_drvdata(input_dev, data);
|
||||
|
||||
@@ -1765,9 +2054,13 @@ static int mxt_configure_objects(struct mxt_data *data,
|
||||
dev_warn(dev, "Error %d updating config\n", error);
|
||||
}
|
||||
|
||||
- error = mxt_initialize_t9_input_device(data);
|
||||
- if (error)
|
||||
- return error;
|
||||
+ if (data->multitouch) {
|
||||
+ error = mxt_initialize_input_device(data);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+ } else {
|
||||
+ dev_warn(dev, "No touch object detected\n");
|
||||
+ }
|
||||
|
||||
dev_info(dev,
|
||||
"Family: %u Variant: %u Firmware V%u.%u.%02X Objects: %u\n",
|
||||
@@ -2044,15 +2337,13 @@ static const struct attribute_group mxt_attr_group = {
|
||||
static void mxt_start(struct mxt_data *data)
|
||||
{
|
||||
/* Touch enable */
|
||||
- mxt_write_object(data,
|
||||
- MXT_TOUCH_MULTI_T9, MXT_TOUCH_CTRL, 0x83);
|
||||
+ mxt_write_object(data, data->multitouch, MXT_TOUCH_CTRL, 0x83);
|
||||
}
|
||||
|
||||
static void mxt_stop(struct mxt_data *data)
|
||||
{
|
||||
/* Touch disable */
|
||||
- mxt_write_object(data,
|
||||
- MXT_TOUCH_MULTI_T9, MXT_TOUCH_CTRL, 0);
|
||||
+ mxt_write_object(data, data->multitouch, MXT_TOUCH_CTRL, 0);
|
||||
}
|
||||
|
||||
static int mxt_input_open(struct input_dev *dev)
|
|
@ -0,0 +1,100 @@
|
|||
From: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
|
||||
Date: Mon, 6 Apr 2015 13:10:30 -0700
|
||||
Subject: [PATCH] Input: atmel_mxt_ts - split out touchpad initialisation logic
|
||||
|
||||
If the "linux,gpio-keymap" DT property is defined, the T19 keys are
|
||||
configured and the device is setup as a touchpad rather than a touchscreen.
|
||||
The logic is part of the input device initialization routine but it can be
|
||||
factored out to its own function to simplify the former.
|
||||
|
||||
Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
|
||||
Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/touchscreen/atmel_mxt_ts.c | 52 ++++++++++++++++++--------------
|
||||
1 file changed, 30 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
index 1b3b845d92f4..2875ddf37289 100644
|
||||
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
@@ -1822,15 +1822,37 @@ static int mxt_read_t100_config(struct mxt_data *data)
|
||||
static int mxt_input_open(struct input_dev *dev);
|
||||
static void mxt_input_close(struct input_dev *dev);
|
||||
|
||||
+static void mxt_set_up_as_touchpad(struct input_dev *input_dev,
|
||||
+ struct mxt_data *data)
|
||||
+{
|
||||
+ const struct mxt_platform_data *pdata = data->pdata;
|
||||
+ int i;
|
||||
+
|
||||
+ input_dev->name = "Atmel maXTouch Touchpad";
|
||||
+
|
||||
+ __set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
|
||||
+
|
||||
+ input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM);
|
||||
+ input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM);
|
||||
+ input_abs_set_res(input_dev, ABS_MT_POSITION_X,
|
||||
+ MXT_PIXELS_PER_MM);
|
||||
+ input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
|
||||
+ MXT_PIXELS_PER_MM);
|
||||
+
|
||||
+ for (i = 0; i < pdata->t19_num_keys; i++)
|
||||
+ if (pdata->t19_keymap[i] != KEY_RESERVED)
|
||||
+ input_set_capability(input_dev, EV_KEY,
|
||||
+ pdata->t19_keymap[i]);
|
||||
+}
|
||||
+
|
||||
static int mxt_initialize_input_device(struct mxt_data *data)
|
||||
{
|
||||
- struct device *dev = &data->client->dev;
|
||||
const struct mxt_platform_data *pdata = data->pdata;
|
||||
+ struct device *dev = &data->client->dev;
|
||||
struct input_dev *input_dev;
|
||||
int error;
|
||||
unsigned int num_mt_slots;
|
||||
unsigned int mt_flags = 0;
|
||||
- int i;
|
||||
|
||||
switch (data->multitouch) {
|
||||
case MXT_TOUCH_MULTI_T9:
|
||||
@@ -1867,26 +1889,6 @@ static int mxt_initialize_input_device(struct mxt_data *data)
|
||||
|
||||
input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
|
||||
|
||||
- if (pdata->t19_num_keys) {
|
||||
- __set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
|
||||
-
|
||||
- for (i = 0; i < pdata->t19_num_keys; i++)
|
||||
- if (pdata->t19_keymap[i] != KEY_RESERVED)
|
||||
- input_set_capability(input_dev, EV_KEY,
|
||||
- pdata->t19_keymap[i]);
|
||||
-
|
||||
- mt_flags |= INPUT_MT_POINTER;
|
||||
-
|
||||
- input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM);
|
||||
- input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM);
|
||||
- input_abs_set_res(input_dev, ABS_MT_POSITION_X,
|
||||
- MXT_PIXELS_PER_MM);
|
||||
- input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
|
||||
- MXT_PIXELS_PER_MM);
|
||||
-
|
||||
- input_dev->name = "Atmel maXTouch Touchpad";
|
||||
- }
|
||||
-
|
||||
/* For single touch */
|
||||
input_set_abs_params(input_dev, ABS_X, 0, data->max_x, 0, 0);
|
||||
input_set_abs_params(input_dev, ABS_Y, 0, data->max_y, 0, 0);
|
||||
@@ -1897,6 +1899,12 @@ static int mxt_initialize_input_device(struct mxt_data *data)
|
||||
input_set_abs_params(input_dev, ABS_PRESSURE, 0, 255, 0, 0);
|
||||
}
|
||||
|
||||
+ /* If device has buttons we assume it is a touchpad */
|
||||
+ if (pdata->t19_num_keys) {
|
||||
+ mxt_set_up_as_touchpad(input_dev, data);
|
||||
+ mt_flags |= INPUT_MT_POINTER;
|
||||
+ }
|
||||
+
|
||||
/* For multi touch */
|
||||
error = input_mt_init_slots(input_dev, num_mt_slots, mt_flags);
|
||||
if (error) {
|
|
@ -1,148 +0,0 @@
|
|||
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Date: Sun, 8 Mar 2015 22:35:41 -0700
|
||||
Subject: [PATCH] Input: synaptics - re-route tracksticks buttons on the Lenovo
|
||||
2015 series
|
||||
|
||||
The 2015 series of the Lenovo thinkpads added back the hardware buttons on
|
||||
top of the touchpad for the trackstick.
|
||||
|
||||
Unfortunately, they are wired to the touchpad, and not the trackstick.
|
||||
Thus, they are seen as extra buttons from the kernel point of view.
|
||||
|
||||
This leads to a problem in user space because extra buttons on synaptics
|
||||
devices used to be used as scroll up/down buttons. So in the end, the
|
||||
experience for the user is scroll events for buttons left and right when
|
||||
using the trackstick. Yay!
|
||||
|
||||
Fortunately, the firmware advertises such behavior in the extended
|
||||
capability $10, and so we can re-route the buttons through the pass-through
|
||||
interface.
|
||||
|
||||
Hallelujah-expressed-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Acked-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/synaptics.c | 47 +++++++++++++++++++++++++++++++----------
|
||||
drivers/input/mouse/synaptics.h | 5 +++++
|
||||
2 files changed, 41 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
|
||||
index 9d599eb79f17..ecc7811cbd46 100644
|
||||
--- a/drivers/input/mouse/synaptics.c
|
||||
+++ b/drivers/input/mouse/synaptics.c
|
||||
@@ -579,18 +579,22 @@ static int synaptics_is_pt_packet(unsigned char *buf)
|
||||
return (buf[0] & 0xFC) == 0x84 && (buf[3] & 0xCC) == 0xC4;
|
||||
}
|
||||
|
||||
-static void synaptics_pass_pt_packet(struct serio *ptport, unsigned char *packet)
|
||||
+static void synaptics_pass_pt_packet(struct psmouse *psmouse,
|
||||
+ struct serio *ptport,
|
||||
+ unsigned char *packet)
|
||||
{
|
||||
+ struct synaptics_data *priv = psmouse->private;
|
||||
struct psmouse *child = serio_get_drvdata(ptport);
|
||||
|
||||
if (child && child->state == PSMOUSE_ACTIVATED) {
|
||||
- serio_interrupt(ptport, packet[1], 0);
|
||||
+ serio_interrupt(ptport, packet[1] | priv->pt_buttons, 0);
|
||||
serio_interrupt(ptport, packet[4], 0);
|
||||
serio_interrupt(ptport, packet[5], 0);
|
||||
if (child->pktsize == 4)
|
||||
serio_interrupt(ptport, packet[2], 0);
|
||||
- } else
|
||||
+ } else {
|
||||
serio_interrupt(ptport, packet[1], 0);
|
||||
+ }
|
||||
}
|
||||
|
||||
static void synaptics_pt_activate(struct psmouse *psmouse)
|
||||
@@ -847,6 +851,7 @@ static void synaptics_report_ext_buttons(struct psmouse *psmouse,
|
||||
struct input_dev *dev = psmouse->dev;
|
||||
struct synaptics_data *priv = psmouse->private;
|
||||
int ext_bits = (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) + 1) >> 1;
|
||||
+ char buf[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
int i;
|
||||
|
||||
if (!SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap))
|
||||
@@ -857,12 +862,30 @@ static void synaptics_report_ext_buttons(struct psmouse *psmouse,
|
||||
!((psmouse->packet[0] ^ psmouse->packet[3]) & 0x02))
|
||||
return;
|
||||
|
||||
- for (i = 0; i < ext_bits; i++) {
|
||||
- input_report_key(dev, BTN_0 + 2 * i,
|
||||
- hw->ext_buttons & (1 << i));
|
||||
- input_report_key(dev, BTN_1 + 2 * i,
|
||||
- hw->ext_buttons & (1 << (i + ext_bits)));
|
||||
+ if (!SYN_CAP_EXT_BUTTONS_STICK(priv->ext_cap_10)) {
|
||||
+ for (i = 0; i < ext_bits; i++) {
|
||||
+ input_report_key(dev, BTN_0 + 2 * i,
|
||||
+ hw->ext_buttons & (1 << i));
|
||||
+ input_report_key(dev, BTN_1 + 2 * i,
|
||||
+ hw->ext_buttons & (1 << (i + ext_bits)));
|
||||
+ }
|
||||
+ return;
|
||||
}
|
||||
+
|
||||
+ /*
|
||||
+ * This generation of touchpads has the trackstick buttons
|
||||
+ * physically wired to the touchpad. Re-route them through
|
||||
+ * the pass-through interface.
|
||||
+ */
|
||||
+ if (!priv->pt_port)
|
||||
+ return;
|
||||
+
|
||||
+ /* The trackstick expects at most 3 buttons */
|
||||
+ priv->pt_buttons = SYN_CAP_EXT_BUTTON_STICK_L(hw->ext_buttons) |
|
||||
+ SYN_CAP_EXT_BUTTON_STICK_R(hw->ext_buttons) << 1 |
|
||||
+ SYN_CAP_EXT_BUTTON_STICK_M(hw->ext_buttons) << 2;
|
||||
+
|
||||
+ synaptics_pass_pt_packet(psmouse, priv->pt_port, buf);
|
||||
}
|
||||
|
||||
static void synaptics_report_buttons(struct psmouse *psmouse,
|
||||
@@ -1459,7 +1482,8 @@ static psmouse_ret_t synaptics_process_byte(struct psmouse *psmouse)
|
||||
if (SYN_CAP_PASS_THROUGH(priv->capabilities) &&
|
||||
synaptics_is_pt_packet(psmouse->packet)) {
|
||||
if (priv->pt_port)
|
||||
- synaptics_pass_pt_packet(priv->pt_port, psmouse->packet);
|
||||
+ synaptics_pass_pt_packet(psmouse, priv->pt_port,
|
||||
+ psmouse->packet);
|
||||
} else
|
||||
synaptics_process_packet(psmouse);
|
||||
|
||||
@@ -1561,8 +1585,9 @@ static void set_input_params(struct psmouse *psmouse,
|
||||
__set_bit(BTN_BACK, dev->keybit);
|
||||
}
|
||||
|
||||
- for (i = 0; i < SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap); i++)
|
||||
- __set_bit(BTN_0 + i, dev->keybit);
|
||||
+ if (!SYN_CAP_EXT_BUTTONS_STICK(priv->ext_cap_10))
|
||||
+ for (i = 0; i < SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap); i++)
|
||||
+ __set_bit(BTN_0 + i, dev->keybit);
|
||||
|
||||
__clear_bit(EV_REL, dev->evbit);
|
||||
__clear_bit(REL_X, dev->relbit);
|
||||
diff --git a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h
|
||||
index 8d3761ce8f54..f39539c70219 100644
|
||||
--- a/drivers/input/mouse/synaptics.h
|
||||
+++ b/drivers/input/mouse/synaptics.h
|
||||
@@ -111,6 +111,10 @@
|
||||
#define SYN_CAP_EXT_BUTTONS_STICK(ex10) ((ex10) & 0x010000)
|
||||
#define SYN_CAP_SECUREPAD(ex10) ((ex10) & 0x020000)
|
||||
|
||||
+#define SYN_CAP_EXT_BUTTON_STICK_L(eb) (!!((eb) & 0x01))
|
||||
+#define SYN_CAP_EXT_BUTTON_STICK_M(eb) (!!((eb) & 0x02))
|
||||
+#define SYN_CAP_EXT_BUTTON_STICK_R(eb) (!!((eb) & 0x04))
|
||||
+
|
||||
/* synaptics modes query bits */
|
||||
#define SYN_MODE_ABSOLUTE(m) ((m) & (1 << 7))
|
||||
#define SYN_MODE_RATE(m) ((m) & (1 << 6))
|
||||
@@ -192,6 +196,7 @@ struct synaptics_data {
|
||||
bool disable_gesture; /* disable gestures */
|
||||
|
||||
struct serio *pt_port; /* Pass-through serio port */
|
||||
+ unsigned char pt_buttons; /* Pass-through buttons */
|
||||
|
||||
struct synaptics_mt_state mt_state; /* Current mt finger state */
|
||||
bool mt_state_lost; /* mt_state may be incorrect */
|
|
@ -1,41 +0,0 @@
|
|||
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Date: Sun, 8 Mar 2015 22:34:50 -0700
|
||||
Subject: [PATCH] Input: synaptics - remove TOPBUTTONPAD property for Lenovos
|
||||
2015
|
||||
|
||||
The 2015 series of the Lenovo thinkpads added back the hardware buttons on
|
||||
top of the touchpad for the trackstick.
|
||||
|
||||
Unfortunately, Lenovo used the PNPIDs that are supposed to be "5 buttons"
|
||||
touchpads, so the new laptops also have the INPUT_PROP_TOPBUTTONPAD. Yay!
|
||||
|
||||
Instead of manually removing each of the new ones, or hoping that we know
|
||||
all the current ones, we can consider that the PNPIDs list that were given
|
||||
contains touchpads that have the trackstick buttons, either physically
|
||||
wired to them, or emulated with the top software button property.
|
||||
|
||||
Thanks to the extra buttons capability in query $10, we can reliably detect
|
||||
the physical buttons from the software ones, and so we can remove the
|
||||
TOPBUTTONPAD property even if it was declared as such.
|
||||
|
||||
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Acked-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/synaptics.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
|
||||
index 8f6a153677b9..9d599eb79f17 100644
|
||||
--- a/drivers/input/mouse/synaptics.c
|
||||
+++ b/drivers/input/mouse/synaptics.c
|
||||
@@ -1570,7 +1570,8 @@ static void set_input_params(struct psmouse *psmouse,
|
||||
|
||||
if (SYN_CAP_CLICKPAD(priv->ext_cap_0c)) {
|
||||
__set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
|
||||
- if (psmouse_matches_pnp_id(psmouse, topbuttonpad_pnp_ids))
|
||||
+ if (psmouse_matches_pnp_id(psmouse, topbuttonpad_pnp_ids) &&
|
||||
+ !SYN_CAP_EXT_BUTTONS_STICK(priv->ext_cap_10))
|
||||
__set_bit(INPUT_PROP_TOPBUTTONPAD, dev->propbit);
|
||||
/* Clickpads report only left button */
|
||||
__clear_bit(BTN_RIGHT, dev->keybit);
|
|
@ -1,32 +0,0 @@
|
|||
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Date: Sun, 8 Mar 2015 22:38:55 -0700
|
||||
Subject: [PATCH] Input: synaptics - remove X1 Carbon 3rd gen from the
|
||||
topbuttonpad list
|
||||
|
||||
Lenovo decided to switch back to physical buttons for the trackstick on
|
||||
their latest series. The PNPId list was provided before they reverted back
|
||||
to physical buttons, so it contains the new models too. We can know from
|
||||
the touchpad capabilities that the touchpad has physical buttons, so
|
||||
removing the ids from the list is not mandatory. It is still nicer to
|
||||
remove the wrong ids, so start by removing the X1 Carbon 3rd gen, with the
|
||||
PNPId of LEN0048.
|
||||
|
||||
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Acked-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/synaptics.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
|
||||
index ecc7811cbd46..160def02cde2 100644
|
||||
--- a/drivers/input/mouse/synaptics.c
|
||||
+++ b/drivers/input/mouse/synaptics.c
|
||||
@@ -183,7 +183,6 @@ static const char * const topbuttonpad_pnp_ids[] = {
|
||||
"LEN0045",
|
||||
"LEN0046",
|
||||
"LEN0047",
|
||||
- "LEN0048",
|
||||
"LEN0049",
|
||||
"LEN2000",
|
||||
"LEN2001", /* Edge E431 */
|
|
@ -1,29 +0,0 @@
|
|||
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Date: Sun, 8 Mar 2015 22:39:17 -0700
|
||||
Subject: [PATCH] Input: synaptics - remove X250 from the topbuttonpad list
|
||||
|
||||
Lenovo X250 has a PnpID of LEN0046, but it does not have the top software
|
||||
button requirement.
|
||||
|
||||
For the record, Lenovo T450s and W541 have a PnpID of LEN200f and LEN004a,
|
||||
so they are not on the top software button list.
|
||||
|
||||
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Reviewed-by: Daniel Martin <consume.noise@gmail.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/synaptics.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
|
||||
index 160def02cde2..ca7ca8d4eb33 100644
|
||||
--- a/drivers/input/mouse/synaptics.c
|
||||
+++ b/drivers/input/mouse/synaptics.c
|
||||
@@ -181,7 +181,6 @@ static const char * const topbuttonpad_pnp_ids[] = {
|
||||
"LEN0041",
|
||||
"LEN0042", /* Yoga */
|
||||
"LEN0045",
|
||||
- "LEN0046",
|
||||
"LEN0047",
|
||||
"LEN0049",
|
||||
"LEN2000",
|
|
@ -1,122 +0,0 @@
|
|||
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Date: Sun, 8 Mar 2015 22:34:03 -0700
|
||||
Subject: [PATCH] Input: synaptics - retrieve the extended capabilities in
|
||||
query $10
|
||||
|
||||
Newer Synaptics touchpads need to get information from the query $10.
|
||||
Retrieve it if available.
|
||||
|
||||
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Acked-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/synaptics.c | 23 ++++++++++++++++++++---
|
||||
drivers/input/mouse/synaptics.h | 23 +++++++++++++++++++++++
|
||||
2 files changed, 43 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
|
||||
index 2176874a41b1..8f6a153677b9 100644
|
||||
--- a/drivers/input/mouse/synaptics.c
|
||||
+++ b/drivers/input/mouse/synaptics.c
|
||||
@@ -241,11 +241,24 @@ static int synaptics_model_id(struct psmouse *psmouse)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int synaptics_more_extended_queries(struct psmouse *psmouse)
|
||||
+{
|
||||
+ struct synaptics_data *priv = psmouse->private;
|
||||
+ unsigned char buf[3];
|
||||
+
|
||||
+ if (synaptics_send_cmd(psmouse, SYN_QUE_MEXT_CAPAB_10, buf))
|
||||
+ return -1;
|
||||
+
|
||||
+ priv->ext_cap_10 = (buf[0]<<16) | (buf[1]<<8) | buf[2];
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
- * Read the board id from the touchpad
|
||||
+ * Read the board id and the "More Extended Queries" from the touchpad
|
||||
* The board id is encoded in the "QUERY MODES" response
|
||||
*/
|
||||
-static int synaptics_board_id(struct psmouse *psmouse)
|
||||
+static int synaptics_query_modes(struct psmouse *psmouse)
|
||||
{
|
||||
struct synaptics_data *priv = psmouse->private;
|
||||
unsigned char bid[3];
|
||||
@@ -257,6 +270,10 @@ static int synaptics_board_id(struct psmouse *psmouse)
|
||||
if (synaptics_send_cmd(psmouse, SYN_QUE_MODES, bid))
|
||||
return -1;
|
||||
priv->board_id = ((bid[0] & 0xfc) << 6) | bid[1];
|
||||
+
|
||||
+ if (SYN_MEXT_CAP_BIT(bid[0]))
|
||||
+ return synaptics_more_extended_queries(psmouse);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -446,7 +463,7 @@ static int synaptics_query_hardware(struct psmouse *psmouse)
|
||||
return -1;
|
||||
if (synaptics_firmware_id(psmouse))
|
||||
return -1;
|
||||
- if (synaptics_board_id(psmouse))
|
||||
+ if (synaptics_query_modes(psmouse))
|
||||
return -1;
|
||||
if (synaptics_capability(psmouse))
|
||||
return -1;
|
||||
diff --git a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h
|
||||
index 1bd01f21783b..8d3761ce8f54 100644
|
||||
--- a/drivers/input/mouse/synaptics.h
|
||||
+++ b/drivers/input/mouse/synaptics.h
|
||||
@@ -22,6 +22,7 @@
|
||||
#define SYN_QUE_EXT_CAPAB_0C 0x0c
|
||||
#define SYN_QUE_EXT_MAX_COORDS 0x0d
|
||||
#define SYN_QUE_EXT_MIN_COORDS 0x0f
|
||||
+#define SYN_QUE_MEXT_CAPAB_10 0x10
|
||||
|
||||
/* synatics modes */
|
||||
#define SYN_BIT_ABSOLUTE_MODE (1 << 7)
|
||||
@@ -53,6 +54,7 @@
|
||||
#define SYN_EXT_CAP_REQUESTS(c) (((c) & 0x700000) >> 20)
|
||||
#define SYN_CAP_MULTI_BUTTON_NO(ec) (((ec) & 0x00f000) >> 12)
|
||||
#define SYN_CAP_PRODUCT_ID(ec) (((ec) & 0xff0000) >> 16)
|
||||
+#define SYN_MEXT_CAP_BIT(m) ((m) & (1 << 1))
|
||||
|
||||
/*
|
||||
* The following describes response for the 0x0c query.
|
||||
@@ -89,6 +91,26 @@
|
||||
#define SYN_CAP_REDUCED_FILTERING(ex0c) ((ex0c) & 0x000400)
|
||||
#define SYN_CAP_IMAGE_SENSOR(ex0c) ((ex0c) & 0x000800)
|
||||
|
||||
+/*
|
||||
+ * The following descibes response for the 0x10 query.
|
||||
+ *
|
||||
+ * byte mask name meaning
|
||||
+ * ---- ---- ------- ------------
|
||||
+ * 1 0x01 ext buttons are stick buttons exported in the extended
|
||||
+ * capability are actually meant to be used
|
||||
+ * by the tracktick (pass-through).
|
||||
+ * 1 0x02 SecurePad the touchpad is a SecurePad, so it
|
||||
+ * contains a built-in fingerprint reader.
|
||||
+ * 1 0xe0 more ext count how many more extented queries are
|
||||
+ * available after this one.
|
||||
+ * 2 0xff SecurePad width the width of the SecurePad fingerprint
|
||||
+ * reader.
|
||||
+ * 3 0xff SecurePad height the height of the SecurePad fingerprint
|
||||
+ * reader.
|
||||
+ */
|
||||
+#define SYN_CAP_EXT_BUTTONS_STICK(ex10) ((ex10) & 0x010000)
|
||||
+#define SYN_CAP_SECUREPAD(ex10) ((ex10) & 0x020000)
|
||||
+
|
||||
/* synaptics modes query bits */
|
||||
#define SYN_MODE_ABSOLUTE(m) ((m) & (1 << 7))
|
||||
#define SYN_MODE_RATE(m) ((m) & (1 << 6))
|
||||
@@ -156,6 +178,7 @@ struct synaptics_data {
|
||||
unsigned long int capabilities; /* Capabilities */
|
||||
unsigned long int ext_cap; /* Extended Capabilities */
|
||||
unsigned long int ext_cap_0c; /* Ext Caps from 0x0c query */
|
||||
+ unsigned long int ext_cap_10; /* Ext Caps from 0x10 query */
|
||||
unsigned long int identity; /* Identification */
|
||||
unsigned int x_res, y_res; /* X/Y resolution in units/mm */
|
||||
unsigned int x_max, y_max; /* Max coordinates (from FW) */
|
|
@ -43,7 +43,7 @@ Signed-off-by: Josh Stone <jistone@redhat.com>
|
|||
2 files changed, 21 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 69952c1404b2..c0aa7af8ee68 100644
|
||||
index dc9f43a019d6..89b47324c032 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -706,7 +706,11 @@ KBUILD_CFLAGS += -fomit-frame-pointer
|
||||
|
@ -59,7 +59,7 @@ index 69952c1404b2..c0aa7af8ee68 100644
|
|||
ifdef CONFIG_DEBUG_INFO
|
||||
ifdef CONFIG_DEBUG_INFO_SPLIT
|
||||
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
|
||||
index 5f2ce616c046..6525e2a5619a 100644
|
||||
index c5cefb3c009c..b663e8e211b0 100644
|
||||
--- a/lib/Kconfig.debug
|
||||
+++ b/lib/Kconfig.debug
|
||||
@@ -165,7 +165,23 @@ config DEBUG_INFO_DWARF4
|
||||
|
@ -85,5 +85,5 @@ index 5f2ce616c046..6525e2a5619a 100644
|
|||
+ environment to automatically compile everything both ways,
|
||||
+ generating an error if anything differs.
|
||||
|
||||
config ENABLE_WARN_DEPRECATED
|
||||
bool "Enable __deprecated logic"
|
||||
config GDB_SCRIPTS
|
||||
bool "Provide GDB scripts for kernel debugging"
|
||||
|
|
|
@ -1,92 +0,0 @@
|
|||
From: Mike Christie <michaelc@cs.wisc.edu>
|
||||
Date: Tue, 21 Apr 2015 03:42:24 -0400
|
||||
Subject: [PATCH] SCSI: add 1024 max sectors black list flag
|
||||
|
||||
This works around a issue with qnap iscsi targets not handling large IOs
|
||||
very well.
|
||||
|
||||
The target returns:
|
||||
|
||||
VPD INQUIRY: Block limits page (SBC)
|
||||
Maximum compare and write length: 1 blocks
|
||||
Optimal transfer length granularity: 1 blocks
|
||||
Maximum transfer length: 4294967295 blocks
|
||||
Optimal transfer length: 4294967295 blocks
|
||||
Maximum prefetch, xdread, xdwrite transfer length: 0 blocks
|
||||
Maximum unmap LBA count: 8388607
|
||||
Maximum unmap block descriptor count: 1
|
||||
Optimal unmap granularity: 16383
|
||||
Unmap granularity alignment valid: 0
|
||||
Unmap granularity alignment: 0
|
||||
Maximum write same length: 0xffffffff blocks
|
||||
Maximum atomic transfer length: 0
|
||||
Atomic alignment: 0
|
||||
Atomic transfer length granularity: 0
|
||||
|
||||
and it is *sometimes* able to handle at least one IO of size up to 8 MB. We
|
||||
have seen in traces where it will sometimes work, but other times it
|
||||
looks like it fails and it looks like it returns failures if we send
|
||||
multiple large IOs sometimes. Also it looks like it can return 2 different
|
||||
errors. It will sometimes send iscsi reject errors indicating out of
|
||||
resources or it will send invalid cdb illegal requests check conditions.
|
||||
And then when it sends iscsi rejects it does not seem to handle retries
|
||||
when there are command sequence holes, so I could not just add code to
|
||||
try and gracefully handle that error code.
|
||||
|
||||
The problem is that we do not have a good contact for the company,
|
||||
so we are not able to determine under what conditions it returns
|
||||
which error and why it sometimes works.
|
||||
|
||||
So, this patch just adds a new black list flag to set targets like this to
|
||||
the old max safe sectors of 1024. The max_hw_sectors changes added in 3.19
|
||||
caused this regression, so I also ccing stable.
|
||||
|
||||
Reported-by: Christian Hesse <list@eworm.de>
|
||||
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
|
||||
Cc: stable@vger.kernel.org
|
||||
---
|
||||
drivers/scsi/scsi_devinfo.c | 1 +
|
||||
drivers/scsi/scsi_scan.c | 6 ++++++
|
||||
include/scsi/scsi_devinfo.h | 1 +
|
||||
3 files changed, 8 insertions(+)
|
||||
|
||||
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
|
||||
index 262ab837a704..9f77d23239a2 100644
|
||||
--- a/drivers/scsi/scsi_devinfo.c
|
||||
+++ b/drivers/scsi/scsi_devinfo.c
|
||||
@@ -226,6 +226,7 @@ static struct {
|
||||
{"PIONEER", "CD-ROM DRM-624X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
|
||||
{"Promise", "VTrak E610f", NULL, BLIST_SPARSELUN | BLIST_NO_RSOC},
|
||||
{"Promise", "", NULL, BLIST_SPARSELUN},
|
||||
+ {"QNAP", "iSCSI Storage", NULL, BLIST_MAX_1024},
|
||||
{"QUANTUM", "XP34301", "1071", BLIST_NOTQ},
|
||||
{"REGAL", "CDC-4X", NULL, BLIST_MAX5LUN | BLIST_SINGLELUN},
|
||||
{"SanDisk", "ImageMate CF-SD1", NULL, BLIST_FORCELUN},
|
||||
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
|
||||
index 983aed10ff2f..cc662c98d2b6 100644
|
||||
--- a/drivers/scsi/scsi_scan.c
|
||||
+++ b/drivers/scsi/scsi_scan.c
|
||||
@@ -909,6 +909,12 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result,
|
||||
*/
|
||||
if (*bflags & BLIST_MAX_512)
|
||||
blk_queue_max_hw_sectors(sdev->request_queue, 512);
|
||||
+ /*
|
||||
+ * Max 1024 sector transfer length for targets that report incorrect
|
||||
+ * max/optimal lengths and relied on the old block layer safe default
|
||||
+ */
|
||||
+ else if (*bflags & BLIST_MAX_1024)
|
||||
+ blk_queue_max_hw_sectors(sdev->request_queue, 1024);
|
||||
|
||||
/*
|
||||
* Some devices may not want to have a start command automatically
|
||||
diff --git a/include/scsi/scsi_devinfo.h b/include/scsi/scsi_devinfo.h
|
||||
index 183eaab7c380..96e3f56519e7 100644
|
||||
--- a/include/scsi/scsi_devinfo.h
|
||||
+++ b/include/scsi/scsi_devinfo.h
|
||||
@@ -36,5 +36,6 @@
|
||||
for sequential scan */
|
||||
#define BLIST_TRY_VPD_PAGES 0x10000000 /* Attempt to read VPD pages */
|
||||
#define BLIST_NO_RSOC 0x20000000 /* don't try to issue RSOC */
|
||||
+#define BLIST_MAX_1024 0x40000000 /* maximum 1024 sector cdb length */
|
||||
|
||||
#endif
|
|
@ -1,39 +0,0 @@
|
|||
From b29c0d36da67a64f5de1fe167c0b807815aa1da4 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Wed, 4 Feb 2015 14:44:51 +0100
|
||||
Subject: [PATCH 2/2] acpi-video: Add disable_native_backlight quirk for
|
||||
Samsung 510R
|
||||
|
||||
Backlight control through the native intel interface does not work properly
|
||||
on the Samsung 510R, where as using the acpi_video interface does work, add
|
||||
a quirk for this.
|
||||
|
||||
BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1186097
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
drivers/acpi/video.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
|
||||
index 497d986..88a4f99 100644
|
||||
--- a/drivers/acpi/video.c
|
||||
+++ b/drivers/acpi/video.c
|
||||
@@ -523,6 +523,15 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
|
||||
},
|
||||
},
|
||||
{
|
||||
+ /* https://bugzilla.redhat.com/show_bug.cgi?id=1186097 */
|
||||
+ .callback = video_disable_native_backlight,
|
||||
+ .ident = "SAMSUNG 3570R/370R/470R/450R/510R/4450RV",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "3570R/370R/470R/450R/510R/4450RV"),
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
/* https://bugzilla.redhat.com/show_bug.cgi?id=1094948 */
|
||||
.callback = video_disable_native_backlight,
|
||||
.ident = "SAMSUNG 730U3E/740U3E",
|
||||
--
|
||||
2.1.0
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -5,17 +5,24 @@ Subject: [PATCH] arm: dts: am335x-bone-common: setup default pinmux
|
|||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/boot/dts/am335x-bone-common.dtsi | 130 ++++++++++++++++++++++++++++++
|
||||
1 file changed, 130 insertions(+)
|
||||
arch/arm/boot/dts/am335x-bone-common.dtsi | 222 ++++++++++++++++++++++++++++++
|
||||
1 file changed, 222 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
index ec755eeb78ee..db880bf46135 100644
|
||||
index 1fd496fe1a68..9688dda39e7a 100644
|
||||
--- a/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
@@ -95,6 +95,13 @@
|
||||
@@ -95,6 +95,20 @@
|
||||
>;
|
||||
};
|
||||
|
||||
+ uart1_pins: pinmux_uart1_pins {
|
||||
+ pinctrl-single,pins = <
|
||||
+ 0x180 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart1_rxd.uart1_rxd */
|
||||
+ 0x184 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart1_txd.uart1_txd */
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ uart1_pins: pinmux_uart1_pins {
|
||||
+ pinctrl-single,pins = <
|
||||
+ 0x180 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart1_rxd.uart1_rxd */
|
||||
|
@ -26,7 +33,7 @@ index ec755eeb78ee..db880bf46135 100644
|
|||
clkout2_pin: pinmux_clkout2_pin {
|
||||
pinctrl-single,pins = <
|
||||
0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr1.clkout2 */
|
||||
@@ -175,6 +182,33 @@
|
||||
@@ -175,6 +189,60 @@
|
||||
0x1c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad7.mmc1_dat7 */
|
||||
>;
|
||||
};
|
||||
|
@ -56,14 +63,48 @@ index ec755eeb78ee..db880bf46135 100644
|
|||
+ pinctrl-single,pins = <
|
||||
+ 0x164 0x0 /* P9_42 (ZCZ ball C18) | MODE 0 */
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ spi0_pins: pinmux_spi0_pins {
|
||||
+ pinctrl-single,pins = <
|
||||
+ 0x150 (PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_sclk.spi0_sclk */
|
||||
+ 0x154 (PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_d0.spi0_d0 */
|
||||
+ 0x158 (PIN_OUTPUT_PULLUP | MUX_MODE0) /* spi0_d1.spi0_d1 */
|
||||
+ 0x15c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* spi0_cs0.spi0_cs0 */
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ ehrpwm1_pin_p9_14: pinmux_ehrpwm1_pin_p9_14 {
|
||||
+ pinctrl-single,pins = <
|
||||
+ 0x048 0x6 /* P9_14 (ZCZ ball U14) | MODE 6 */
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ ehrpwm1_pin_p9_16: pinmux_ehrpwm1_pin_p9_16 {
|
||||
+ pinctrl-single,pins = <
|
||||
+ 0x04c 0x6 /* P9_16 (ZCZ ball T14) | MODE 6 */
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ ecap0_pin_p9_42: pinmux_ecap0_pin_p9_42 {
|
||||
+ pinctrl-single,pins = <
|
||||
+ 0x164 0x0 /* P9_42 (ZCZ ball C18) | MODE 0 */
|
||||
+ >;
|
||||
+ };
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
@@ -184,6 +218,13 @@
|
||||
@@ -184,6 +252,20 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&uart1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart1_pins>;
|
||||
+
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart1_pins>;
|
||||
|
@ -74,10 +115,60 @@ index ec755eeb78ee..db880bf46135 100644
|
|||
&usb {
|
||||
status = "okay";
|
||||
};
|
||||
@@ -259,6 +300,56 @@
|
||||
@@ -259,6 +341,106 @@
|
||||
};
|
||||
};
|
||||
|
||||
+&epwmss0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&ecap0_pin_p9_42>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ecap@48300100 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&epwmss1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <
|
||||
+ &ehrpwm1_pin_p9_14
|
||||
+ &ehrpwm1_pin_p9_16
|
||||
+ >;
|
||||
+
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ehrpwm@48302200 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&spi0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&spi0_pins>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ spidev0: spi@0 {
|
||||
+ compatible = "spidev";
|
||||
+ reg = <0>;
|
||||
+ spi-max-frequency = <16000000>;
|
||||
+ spi-cpha;
|
||||
+ };
|
||||
+
|
||||
+ spidev1: spi@1 {
|
||||
+ compatible = "spidev";
|
||||
+ reg = <1>;
|
||||
+ spi-max-frequency = <16000000>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&tscadc {
|
||||
+ status = "okay";
|
||||
+ adc {
|
||||
+ ti,adc-channels = <4 5 6>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&epwmss0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&ecap0_pin_p9_42>;
|
||||
|
@ -131,10 +222,12 @@ index ec755eeb78ee..db880bf46135 100644
|
|||
/include/ "tps65217.dtsi"
|
||||
|
||||
&tps {
|
||||
@@ -340,3 +431,42 @@
|
||||
cd-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
|
||||
cd-inverted;
|
||||
};
|
||||
@@ -347,4 +529,44 @@
|
||||
|
||||
&sham {
|
||||
status = "okay";
|
||||
+
|
||||
+};
|
||||
+
|
||||
+/ {
|
||||
+ ocp {
|
||||
|
@ -173,4 +266,4 @@ index ec755eeb78ee..db880bf46135 100644
|
|||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
};
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
From: Mark Salter <msalter@redhat.com>
|
||||
Date: Wed, 25 Mar 2015 14:17:50 -0400
|
||||
Subject: [PATCH] arm64: avoid needing console= to enable serial console
|
||||
|
||||
Tell kernel to prefer one of the serial ports for console on
|
||||
platforms currently supported (pl011 or 8250). console= on
|
||||
command line will override these assumed preferences. This is
|
||||
just a hack to get the behavior we want from DT provided by
|
||||
firmware.
|
||||
|
||||
Signed-off-by: Mark Salter <msalter@redhat.com>
|
||||
---
|
||||
arch/arm64/kernel/setup.c | 19 +++++++++++++++++++
|
||||
1 file changed, 19 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
|
||||
index 781f4697dc26..164d618d988c 100644
|
||||
--- a/arch/arm64/kernel/setup.c
|
||||
+++ b/arch/arm64/kernel/setup.c
|
||||
@@ -559,3 +559,22 @@ const struct seq_operations cpuinfo_op = {
|
||||
.stop = c_stop,
|
||||
.show = c_show
|
||||
};
|
||||
+
|
||||
+/*
|
||||
+ * Temporary hack to avoid need for console= on command line
|
||||
+ */
|
||||
+static int __init arm64_console_setup(void)
|
||||
+{
|
||||
+ /* Allow cmdline to override our assumed preferences */
|
||||
+ if (console_set_on_cmdline)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (IS_ENABLED(CONFIG_SERIAL_AMBA_PL011))
|
||||
+ add_preferred_console("ttyAMA", 0, "115200");
|
||||
+
|
||||
+ if (IS_ENABLED(CONFIG_SERIAL_8250))
|
||||
+ add_preferred_console("ttyS", 0, "115200");
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+early_initcall(arm64_console_setup);
|
|
@ -0,0 +1,169 @@
|
|||
Documentation/workqueue.txt:
|
||||
If there is dependency among multiple work items used
|
||||
during memory reclaim, they should be queued to separate
|
||||
wq each with WQ_MEM_RECLAIM.
|
||||
|
||||
Loop devices can be stacked, so we have to convert to per-device
|
||||
workqueue. One example is Fedora live CD.
|
||||
|
||||
Fixes: b5dd2f6047ca108001328aac0e8588edd15f1778
|
||||
Cc: stable@vger.kernel.org (v4.0)
|
||||
Cc: Justin M. Forbes <jforbes@fedoraproject.org>
|
||||
Signed-off-by: Ming Lei <ming.lei@canonical.com>
|
||||
---
|
||||
drivers/block/loop.c | 30 ++++++++++++++----------------
|
||||
drivers/block/loop.h | 1 +
|
||||
2 files changed, 15 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
|
||||
index ae3fcb4..3dc1598 100644
|
||||
--- a/drivers/block/loop.c
|
||||
+++ b/drivers/block/loop.c
|
||||
@@ -86,8 +86,6 @@ static DEFINE_MUTEX(loop_index_mutex);
|
||||
static int max_part;
|
||||
static int part_shift;
|
||||
|
||||
-static struct workqueue_struct *loop_wq;
|
||||
-
|
||||
/*
|
||||
* Transfer functions
|
||||
*/
|
||||
@@ -725,6 +723,12 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
|
||||
size = get_loop_size(lo, file);
|
||||
if ((loff_t)(sector_t)size != size)
|
||||
goto out_putf;
|
||||
+ error = -ENOMEM;
|
||||
+ lo->wq = alloc_workqueue("kloopd%d",
|
||||
+ WQ_MEM_RECLAIM | WQ_HIGHPRI | WQ_UNBOUND, 0,
|
||||
+ lo->lo_number);
|
||||
+ if (!lo->wq)
|
||||
+ goto out_putf;
|
||||
|
||||
error = 0;
|
||||
|
||||
@@ -872,6 +876,8 @@ static int loop_clr_fd(struct loop_device *lo)
|
||||
lo->lo_flags = 0;
|
||||
if (!part_shift)
|
||||
lo->lo_disk->flags |= GENHD_FL_NO_PART_SCAN;
|
||||
+ destroy_workqueue(lo->wq);
|
||||
+ lo->wq = NULL;
|
||||
mutex_unlock(&lo->lo_ctl_mutex);
|
||||
/*
|
||||
* Need not hold lo_ctl_mutex to fput backing file.
|
||||
@@ -1425,9 +1431,13 @@ static int loop_queue_rq(struct blk_mq_hw_ctx *hctx,
|
||||
const struct blk_mq_queue_data *bd)
|
||||
{
|
||||
struct loop_cmd *cmd = blk_mq_rq_to_pdu(bd->rq);
|
||||
+ struct loop_device *lo = cmd->rq->q->queuedata;
|
||||
|
||||
blk_mq_start_request(bd->rq);
|
||||
|
||||
+ if (lo->lo_state != Lo_bound)
|
||||
+ return -EIO;
|
||||
+
|
||||
if (cmd->rq->cmd_flags & REQ_WRITE) {
|
||||
struct loop_device *lo = cmd->rq->q->queuedata;
|
||||
bool need_sched = true;
|
||||
@@ -1441,9 +1451,9 @@ static int loop_queue_rq(struct blk_mq_hw_ctx *hctx,
|
||||
spin_unlock_irq(&lo->lo_lock);
|
||||
|
||||
if (need_sched)
|
||||
- queue_work(loop_wq, &lo->write_work);
|
||||
+ queue_work(lo->wq, &lo->write_work);
|
||||
} else {
|
||||
- queue_work(loop_wq, &cmd->read_work);
|
||||
+ queue_work(lo->wq, &cmd->read_work);
|
||||
}
|
||||
|
||||
return BLK_MQ_RQ_QUEUE_OK;
|
||||
@@ -1455,9 +1465,6 @@ static void loop_handle_cmd(struct loop_cmd *cmd)
|
||||
struct loop_device *lo = cmd->rq->q->queuedata;
|
||||
int ret = -EIO;
|
||||
|
||||
- if (lo->lo_state != Lo_bound)
|
||||
- goto failed;
|
||||
-
|
||||
if (write && (lo->lo_flags & LO_FLAGS_READ_ONLY))
|
||||
goto failed;
|
||||
|
||||
@@ -1806,13 +1813,6 @@ static int __init loop_init(void)
|
||||
goto misc_out;
|
||||
}
|
||||
|
||||
- loop_wq = alloc_workqueue("kloopd",
|
||||
- WQ_MEM_RECLAIM | WQ_HIGHPRI | WQ_UNBOUND, 0);
|
||||
- if (!loop_wq) {
|
||||
- err = -ENOMEM;
|
||||
- goto misc_out;
|
||||
- }
|
||||
-
|
||||
blk_register_region(MKDEV(LOOP_MAJOR, 0), range,
|
||||
THIS_MODULE, loop_probe, NULL, NULL);
|
||||
|
||||
@@ -1850,8 +1850,6 @@ static void __exit loop_exit(void)
|
||||
blk_unregister_region(MKDEV(LOOP_MAJOR, 0), range);
|
||||
unregister_blkdev(LOOP_MAJOR, "loop");
|
||||
|
||||
- destroy_workqueue(loop_wq);
|
||||
-
|
||||
misc_deregister(&loop_misc);
|
||||
}
|
||||
|
||||
diff --git a/drivers/block/loop.h b/drivers/block/loop.h
|
||||
index 301c27f..49564ed 100644
|
||||
--- a/drivers/block/loop.h
|
||||
+++ b/drivers/block/loop.h
|
||||
@@ -54,6 +54,7 @@ struct loop_device {
|
||||
gfp_t old_gfp_mask;
|
||||
|
||||
spinlock_t lo_lock;
|
||||
+ struct workqueue_struct *wq;
|
||||
struct list_head write_cmd_head;
|
||||
struct work_struct write_work;
|
||||
bool write_started;
|
||||
--
|
||||
1.9.1
|
||||
If there are too many pending per work I/O, too many
|
||||
high priority work thread can be generated so that
|
||||
system performance can be effected.
|
||||
|
||||
This patch limits the max_active parameter of workqueue as 16.
|
||||
|
||||
This patch fixes Fedora 22 live booting performance
|
||||
regression when it is booted from squashfs over dm
|
||||
based on loop, and looks the following reasons are
|
||||
related with the problem:
|
||||
|
||||
- not like other filesyststems(such as ext4), squashfs
|
||||
is a bit special, and I observed that increasing I/O jobs
|
||||
to access file in squashfs only improve I/O performance a
|
||||
little, but it can make big difference for ext4
|
||||
|
||||
- nested loop: both squashfs.img and ext3fs.img are mounted
|
||||
as loop block, and ext3fs.img is inside the squashfs
|
||||
|
||||
- during booting, lots of tasks may run concurrently
|
||||
|
||||
Fixes: b5dd2f6047ca108001328aac0e8588edd15f1778
|
||||
Cc: stable@vger.kernel.org (v4.0)
|
||||
Cc: Justin M. Forbes <jforbes@fedoraproject.org>
|
||||
Signed-off-by: Ming Lei <ming.lei@canonical.com>
|
||||
---
|
||||
drivers/block/loop.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
|
||||
index 3dc1598..1bee523 100644
|
||||
--- a/drivers/block/loop.c
|
||||
+++ b/drivers/block/loop.c
|
||||
@@ -725,7 +725,7 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
|
||||
goto out_putf;
|
||||
error = -ENOMEM;
|
||||
lo->wq = alloc_workqueue("kloopd%d",
|
||||
- WQ_MEM_RECLAIM | WQ_HIGHPRI | WQ_UNBOUND, 0,
|
||||
+ WQ_MEM_RECLAIM | WQ_HIGHPRI | WQ_UNBOUND, 16,
|
||||
lo->lo_number);
|
||||
if (!lo->wq)
|
||||
goto out_putf;
|
||||
--
|
||||
1.9.1
|
|
@ -58,7 +58,6 @@ CONFIG_SERIAL_AMBA_PL011=y
|
|||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_DW=y
|
||||
CONFIG_SERIO_AMBAKMI=y
|
||||
CONFIG_OC_ETM=y
|
||||
CONFIG_FB_ARMCLCD=y
|
||||
|
||||
# ARM VExpress
|
||||
|
@ -101,7 +100,6 @@ CONFIG_OF_RESERVED_MEM=y
|
|||
CONFIG_OF_RESOLVE=y
|
||||
CONFIG_PM_GENERIC_DOMAINS_OF=y
|
||||
CONFIG_PATA_OF_PLATFORM=m
|
||||
# CONFIG_OF_SELFTEST is not set
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_THERMAL_OF=y
|
||||
|
||||
|
@ -114,6 +112,33 @@ CONFIG_USB_OHCI_HCD_PLATFORM=m
|
|||
CONFIG_USB_EHCI_HCD_PLATFORM=m
|
||||
CONFIG_USB_XHCI_PLATFORM=m
|
||||
|
||||
# MMC/SD
|
||||
CONFIG_MMC_SPI=m
|
||||
|
||||
# Designware (used by numerous devices)
|
||||
CONFIG_MMC_DW=m
|
||||
CONFIG_MMC_DW_PLTFM=m
|
||||
CONFIG_MMC_DW_PCI=m
|
||||
CONFIG_SPI_DW_MMIO=m
|
||||
CONFIG_SPI_DW_PCI=m
|
||||
# CONFIG_MMC_DW_IDMAC is not set
|
||||
# CONFIG_MMC_DW_K3 is not set
|
||||
# CONFIG_MMC_QCOM_DML is not set
|
||||
CONFIG_USB_DWC2=m
|
||||
CONFIG_USB_DWC2_DUAL_ROLE=y
|
||||
CONFIG_USB_DWC2_PLATFORM=m
|
||||
CONFIG_USB_DWC2_PCI=m
|
||||
# CONFIG_USB_DWC2_DEBUG is not set
|
||||
# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
|
||||
CONFIG_USB_DWC3=m
|
||||
CONFIG_USB_DWC3_DUAL_ROLE=y
|
||||
CONFIG_USB_DWC3_PCI=m
|
||||
# CONFIG_USB_DWC3_DEBUG is not set
|
||||
# CONFIG_DWC3_HOST_USB3_LPM_ENABLE is not set
|
||||
CONFIG_DW_WATCHDOG=m
|
||||
CONFIG_PCIE_DW=y
|
||||
# CONFIG_MMC_DW_EXYNOS is not set
|
||||
|
||||
# External Connectors
|
||||
CONFIG_EXTCON=m
|
||||
CONFIG_EXTCON_GPIO=m
|
||||
|
@ -169,9 +194,6 @@ CONFIG_IIO_SYSFS_TRIGGER=m
|
|||
# PHY framework
|
||||
CONFIG_GENERIC_PHY=y
|
||||
|
||||
# MFD
|
||||
CONFIG_MFD_CORE=m
|
||||
|
||||
CONFIG_SMC91X=m
|
||||
CONFIG_SMC911X=m
|
||||
|
||||
|
@ -282,3 +304,8 @@ CONFIG_CMA_AREAS=7
|
|||
# CONFIG_BMP085_SPI is not set
|
||||
# CONFIG_TI_DAC7512 is not set
|
||||
# CONFIG_SPI_ROCKCHIP is not set
|
||||
|
||||
# EDAC
|
||||
CONFIG_EDAC=y
|
||||
CONFIG_EDAC_MM_EDAC=m
|
||||
CONFIG_EDAC_LEGACY_SYSFS=y
|
||||
|
|
16
config-arm64
16
config-arm64
|
@ -10,6 +10,10 @@ CONFIG_SCHED_SMT=y
|
|||
CONFIG_ARCH_XGENE=y
|
||||
CONFIG_ARCH_SEATTLE=y
|
||||
# CONFIG_ARCH_THUNDER is not set
|
||||
# CONFIG_ARCH_EXYNOS7 is not set
|
||||
# CONFIG_ARCH_FSL_LS2085A is not set
|
||||
# CONFIG_ARCH_MEDIATEK is not set
|
||||
# CONFIG_ARCH_TEGRA is not set
|
||||
|
||||
# Erratum
|
||||
CONFIG_ARM64_ERRATUM_826319=y
|
||||
|
@ -103,6 +107,7 @@ CONFIG_NET_XGENE=y
|
|||
CONFIG_RTC_DRV_XGENE=m
|
||||
CONFIG_HW_RANDOM_XGENE=m
|
||||
CONFIG_GPIO_XGENE=y
|
||||
CONFIG_GPIO_XGENE_SB=m
|
||||
|
||||
# busted build for various reasons
|
||||
# uses pci_* for some reason to allocate DMA buffers
|
||||
|
@ -141,8 +146,12 @@ CONFIG_AMD_XGBE=m
|
|||
CONFIG_AMD_XGBE_PHY=m
|
||||
# CONFIG_AMD_XGBE_DCB is not set
|
||||
|
||||
CONFIG_NET_VENDOR_MELLANOX=y
|
||||
CONFIG_MLX4_EN=m
|
||||
CONFIG_MLX4_EN_DCB=y
|
||||
CONFIG_MLX4_EN_VXLAN=y
|
||||
|
||||
# CONFIG_IMX_THERMAL is not set
|
||||
# CONFIG_MMC_DW is not set
|
||||
|
||||
CONFIG_DMI=y
|
||||
CONFIG_DMIID=y
|
||||
|
@ -153,3 +162,8 @@ CONFIG_SATA_AHCI_PLATFORM=y
|
|||
# CONFIG_SND_SOC is not set
|
||||
|
||||
# CONFIG_PMIC_OPREGION is not set
|
||||
# CONFIG_DEBUG_RODATA is not set
|
||||
|
||||
CONFIG_DEBUG_SECTION_MISMATCH=y
|
||||
|
||||
CONFIG_EDAC_XGENE=y
|
||||
|
|
24
config-armv7
24
config-armv7
|
@ -41,6 +41,7 @@ CONFIG_RTC_DRV_S35390A=m
|
|||
CONFIG_RTC_DRV_88PM80X=m
|
||||
CONFIG_RTC_DRV_ISL12057=m
|
||||
CONFIG_RTC_DRV_MV=m
|
||||
CONFIG_RTC_DRV_ARMADA38X=m
|
||||
CONFIG_MVNETA=m
|
||||
CONFIG_GPIO_MVEBU=y
|
||||
CONFIG_MVEBU_CLK_CORE=y
|
||||
|
@ -63,6 +64,7 @@ CONFIG_USB_EHCI_HCD_ORION=m
|
|||
CONFIG_MMC_SDHCI_PXAV3=m
|
||||
CONFIG_MVPP2=m
|
||||
CONFIG_COMMON_CLK_SI5351=m
|
||||
CONFIG_RTC_DRV_ARMADA38X=m
|
||||
# CONFIG_CACHE_FEROCEON_L2 is not set
|
||||
# CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH is not set
|
||||
|
||||
|
@ -73,8 +75,6 @@ CONFIG_SOC_OMAP5=y
|
|||
CONFIG_SOC_OMAP3430=y
|
||||
CONFIG_SOC_TI81XX=y
|
||||
# CONFIG_MACH_CM_T35 is not set
|
||||
# CONFIG_MACH_CM_T3517 is not set
|
||||
# CONFIG_MACH_CRANEBOARD is not set
|
||||
# CONFIG_MACH_DEVKIT8000 is not set
|
||||
# CONFIG_MACH_NOKIA_RX51 is not set
|
||||
# CONFIG_MACH_OMAP_LDP is not set
|
||||
|
@ -98,9 +98,7 @@ CONFIG_OMAP_PACKAGE_CUS=y
|
|||
|
||||
CONFIG_OMAP2PLUS_MBOX=m
|
||||
CONFIG_OMAP_MBOX_KFIFO_SIZE=256
|
||||
CONFIG_OMAP_DM_TIMER=y
|
||||
CONFIG_OMAP_PM_NOOP=y
|
||||
CONFIG_DMA_OMAP=y
|
||||
CONFIG_DMA_OMAP=m
|
||||
CONFIG_OMAP_IOMMU=y
|
||||
CONFIG_HWSPINLOCK_OMAP=m
|
||||
# CONFIG_OMAP3_SDRC_AC_TIMING is not set
|
||||
|
@ -114,6 +112,8 @@ CONFIG_GPIO_TWL6040=m
|
|||
CONFIG_GPIO_PCF857X=m
|
||||
CONFIG_I2C_OMAP=m
|
||||
CONFIG_CHARGER_TWL4030=m
|
||||
CONFIG_CHARGER_ISP1704=m
|
||||
CONFIG_CHARGER_BQ2415X=m
|
||||
CONFIG_OMAP_WATCHDOG=m
|
||||
CONFIG_TWL4030_CORE=y
|
||||
CONFIG_TWL4030_MADC=m
|
||||
|
@ -159,7 +159,6 @@ CONFIG_REGULATOR_PALMAS=y
|
|||
CONFIG_REGULATOR_PBIAS=m
|
||||
CONFIG_RTC_DRV_PALMAS=m
|
||||
CONFIG_OMAP5_DSS_HDMI=y
|
||||
CONFIG_OMAP5_DSS_HDMI_AUDIO=y
|
||||
CONFIG_COMMON_CLK_PALMAS=m
|
||||
CONFIG_INPUT_PALMAS_PWRBUTTON=m
|
||||
|
||||
|
@ -223,6 +222,7 @@ CONFIG_OMAP2_DSS_DSI=y
|
|||
CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
|
||||
CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y
|
||||
|
||||
CONFIG_DISPLAY_ENCODER_OPA362=m
|
||||
CONFIG_DISPLAY_ENCODER_TFP410=m
|
||||
CONFIG_DISPLAY_ENCODER_TPD12S015=m
|
||||
CONFIG_DISPLAY_CONNECTOR_DVI=m
|
||||
|
@ -259,7 +259,10 @@ CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m
|
|||
CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m
|
||||
CONFIG_SND_OMAP_SOC_RX51=m
|
||||
CONFIG_SND_SOC_TLV320AIC23=m
|
||||
CONFIG_SND_SOC_TLV320AIC23_I2C=m
|
||||
CONFIG_SND_SOC_TLV320AIC23_SPI=m
|
||||
CONFIG_SND_SOC_TLV320AIC3X=m
|
||||
CONFIG_SND_SOC_TLV320AIC31XX=m
|
||||
CONFIG_SND_SOC_TPA6130A2=m
|
||||
CONFIG_SND_SOC_TWL4030=m
|
||||
CONFIG_SND_SOC_TWL6040=m
|
||||
|
@ -289,9 +292,11 @@ CONFIG_TI_DAVINCI_EMAC=m
|
|||
CONFIG_TI_DAVINCI_MDIO=m
|
||||
CONFIG_TI_CPSW=m
|
||||
CONFIG_TI_CPSW_PHY_SEL=y
|
||||
CONFIG_TI_CPSW_ALE=m
|
||||
CONFIG_TI_CPTS=y
|
||||
# Builtin needed for BBone White
|
||||
CONFIG_REGULATOR_TPS65217=y
|
||||
CONFIG_INPUT_TPS65218_PWRBUTTON=m
|
||||
CONFIG_TI_EMIF=m
|
||||
CONFIG_DRM_TILCDC=m
|
||||
CONFIG_SPI_DAVINCI=m
|
||||
|
@ -308,6 +313,7 @@ CONFIG_TI_AM335X_ADC=m
|
|||
CONFIG_PWM_TIPWMSS=y
|
||||
CONFIG_MFD_TPS65218=m
|
||||
CONFIG_REGULATOR_TPS65218=m
|
||||
CONFIG_VIDEO_AM437X_VPFE=m
|
||||
|
||||
# QCom
|
||||
CONFIG_ARCH_MSM8X60=y
|
||||
|
@ -321,8 +327,11 @@ CONFIG_PINCTRL_APQ8084=m
|
|||
CONFIG_PINCTRL_IPQ8064=m
|
||||
CONFIG_PINCTRL_MSM8960=m
|
||||
CONFIG_PINCTRL_MSM8X74=m
|
||||
CONFIG_PINCTRL_MSM8916=m
|
||||
CONFIG_PINCTRL_QCOM_SPMI_PMIC=m
|
||||
CONFIG_COMMON_CLK_QCOM=m
|
||||
# CONFIG_IPQ_LCC_806X is not set
|
||||
# CONFIG_MSM_LCC_8960 is not set
|
||||
CONFIG_MFD_QCOM_RPM=m
|
||||
CONFIG_MFD_PM8921_CORE=m
|
||||
CONFIG_REGULATOR_QCOM_RPM=m
|
||||
|
@ -363,6 +372,7 @@ CONFIG_MFD_SPMI_PMIC=m
|
|||
CONFIG_SPMI=m
|
||||
CONFIG_SPMI_MSM_PMIC_ARB=m
|
||||
CONFIG_QCOM_SPMI_IADC=m
|
||||
CONFIG_QCOM_SPMI_VADC=m
|
||||
|
||||
# i.MX
|
||||
# CONFIG_MXC_DEBUG_BOARD is not set
|
||||
|
@ -628,6 +638,8 @@ CONFIG_USB_GADGET_XILINX=m
|
|||
CONFIG_PCIE_XILINX=y
|
||||
CONFIG_CADENCE_WATCHDOG=m
|
||||
CONFIG_REGULATOR_ISL9305=m
|
||||
CONFIG_EDAC_SYNOPSYS=m
|
||||
CONFIG_PINCTRL_ZYNQ=y
|
||||
|
||||
# Multi function devices
|
||||
CONFIG_MFD_88PM800=m
|
||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_ARM_CPU_TOPOLOGY=y
|
|||
CONFIG_ARM_DMA_MEM_BUFFERABLE=y
|
||||
CONFIG_SWP_EMULATE=y
|
||||
CONFIG_CACHE_L2X0=y
|
||||
CONFIG_CACHE_PL310=y
|
||||
CONFIG_HIGHPTE=y
|
||||
CONFIG_AUTO_ZRELADDR=y
|
||||
CONFIG_ATAGS=y
|
||||
|
@ -34,6 +33,7 @@ CONFIG_ZBOOT_ROM_BSS=0x0
|
|||
CONFIG_XZ_DEC_ARMTHUMB=y
|
||||
CONFIG_ARCH_HAS_TICK_BROADCAST=y
|
||||
CONFIG_IRQ_CROSSBAR=y
|
||||
CONFIG_IOMMU_IO_PGTABLE_LPAE=y
|
||||
|
||||
# CONFIG_MCPM is not set
|
||||
# CONFIG_OABI_COMPAT is not set
|
||||
|
@ -71,6 +71,7 @@ CONFIG_ARCH_VIRT=y
|
|||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_ARCH_VEXPRESS_SPC is not set
|
||||
# CONFIG_ARCH_WM8850 is not set
|
||||
# CONFIG_ARCH_DIGICOLOR is not set
|
||||
|
||||
# errata
|
||||
# v5/v6
|
||||
|
@ -127,6 +128,12 @@ CONFIG_THERMAL=y
|
|||
CONFIG_CLOCK_THERMAL=y
|
||||
CONFIG_CPUFREQ_DT=y
|
||||
# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set
|
||||
CONFIG_PM_DEVFREQ=y
|
||||
CONFIG_PM_DEVFREQ_EVENT=y
|
||||
CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
|
||||
CONFIG_DEVFREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_DEVFREQ_GOV_POWERSAVE=y
|
||||
CONFIG_DEVFREQ_GOV_USERSPACE=y
|
||||
|
||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
|
||||
CONFIG_LSM_MMAP_MIN_ADDR=32768
|
||||
|
@ -154,7 +161,6 @@ CONFIG_ARM_TIMER_SP804=y
|
|||
CONFIG_SERIO_AMBAKMI=m
|
||||
CONFIG_SERIAL_AMBA_PL010=y
|
||||
CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
|
||||
CONFIG_SERIAL_MRST_MAX3110=m
|
||||
|
||||
CONFIG_RTC_DRV_PL030=y
|
||||
CONFIG_RTC_DRV_PL031=y
|
||||
|
@ -164,6 +170,7 @@ CONFIG_AMBA_PL08X=y
|
|||
CONFIG_GPIO_PL061=y
|
||||
CONFIG_PL320_MBOX=y
|
||||
CONFIG_SND_ARMAACI=m
|
||||
CONFIG_USB_ISP1760=m
|
||||
|
||||
# highbank
|
||||
CONFIG_EDAC_HIGHBANK_MC=m
|
||||
|
@ -172,7 +179,7 @@ CONFIG_SATA_HIGHBANK=m
|
|||
CONFIG_ARM_HIGHBANK_CPUFREQ=m
|
||||
# CONFIG_ARM_HIGHBANK_CPUIDLE is not set
|
||||
|
||||
# Allwinner
|
||||
# AllWinner
|
||||
# CONFIG_MACH_SUN4I is not set
|
||||
# CONFIG_MACH_SUN5I is not set
|
||||
CONFIG_MACH_SUN6I=y
|
||||
|
@ -192,7 +199,6 @@ CONFIG_SPI_SUN6I=m
|
|||
CONFIG_MMC_SUNXI=m
|
||||
CONFIG_I2C_SUN6I_P2WI=m
|
||||
CONFIG_GPIO_PCA953X=m
|
||||
CONFIG_POWER_RESET_SUN6I=y
|
||||
CONFIG_TOUCHSCREEN_SUN4I=m
|
||||
CONFIG_MFD_AXP20X=y
|
||||
CONFIG_REGULATOR_AXP20X=m
|
||||
|
@ -202,6 +208,9 @@ CONFIG_SUN4I_EMAC=m
|
|||
CONFIG_RTC_DRV_SUN6I=m
|
||||
CONFIG_AXP288_ADC=m
|
||||
CONFIG_MTD_NAND_SUNXI=m
|
||||
CONFIG_SERIO_SUN4I_PS2=m
|
||||
CONFIG_KEYBOARD_SUN4I_LRADC=m
|
||||
CONFIG_PWM_SUN4I=m
|
||||
|
||||
# Exynos
|
||||
CONFIG_ARCH_EXYNOS3=y
|
||||
|
@ -220,13 +229,15 @@ CONFIG_ARM_EXYNOS5250_CPUFREQ=y
|
|||
CONFIG_ARM_EXYNOS5440_CPUFREQ=y
|
||||
CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW=y
|
||||
CONFIG_ARM_EXYNOS_CPUIDLE=y
|
||||
CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU=y
|
||||
CONFIG_ARM_EXYNOS5_BUS_DEVFREQ=m
|
||||
# CONFIG_EXYNOS5420_MCPM not set
|
||||
CONFIG_ARM_EXYNOS_CPUFREQ=m
|
||||
|
||||
CONFIG_I2C_EXYNOS5=m
|
||||
CONFIG_I2C_S3C2410=m
|
||||
CONFIG_SPI_S3C64XX=m
|
||||
CONFIG_EXYNOS_THERMAL=m
|
||||
CONFIG_EXYNOS_THERMAL_CORE=y
|
||||
CONFIG_EXYNOS_ADC=m
|
||||
CONFIG_MMC_SDHCI_S3C=m
|
||||
CONFIG_MMC_SDHCI_S3C_DMA=y
|
||||
|
@ -256,12 +267,12 @@ CONFIG_REGULATOR_WM8994=m
|
|||
CONFIG_EXYNOS_VIDEO=y
|
||||
CONFIG_EXYNOS_MIPI_DSI=y
|
||||
CONFIG_DRM_EXYNOS=m
|
||||
CONFIG_DRM_EXYNOS_DMABUF=y
|
||||
CONFIG_DRM_EXYNOS_DP=y
|
||||
CONFIG_DRM_EXYNOS_DPI=y
|
||||
CONFIG_DRM_EXYNOS_DSI=y
|
||||
CONFIG_DRM_EXYNOS_FIMC=y
|
||||
CONFIG_DRM_EXYNOS_FIMD=y
|
||||
CONFIG_DRM_EXYNOS7_DECON=y
|
||||
CONFIG_DRM_EXYNOS_G2D=y
|
||||
CONFIG_DRM_EXYNOS_GSC=y
|
||||
CONFIG_DRM_EXYNOS_HDMI=y
|
||||
|
@ -294,7 +305,6 @@ CONFIG_SND_SOC_ODROIDX2=m
|
|||
# CONFIG_EXYNOS_IOMMU_DEBUG is not set
|
||||
# CONFIG_SAMSUNG_PM_DEBUG is not set
|
||||
# CONFIG_SAMSUNG_PM_CHECK is not set
|
||||
# CONFIG_ARM_EXYNOS5_BUS_DEVFREQ is not set
|
||||
|
||||
# Arndale/Origen
|
||||
CONFIG_MFD_MAX8997=y
|
||||
|
@ -333,6 +343,8 @@ CONFIG_SND_SOC_ROCKCHIP=m
|
|||
CONFIG_SND_SOC_ROCKCHIP_I2S=m
|
||||
CONFIG_ROCKCHIP_THERMAL=m
|
||||
CONFIG_DRM_ROCKCHIP=m
|
||||
CONFIG_ROCKCHIP_DW_HDMI=m
|
||||
CONFIG_PHY_ROCKCHIP_USB=m
|
||||
|
||||
# Tegra
|
||||
CONFIG_ARCH_TEGRA_114_SOC=y
|
||||
|
@ -340,7 +352,6 @@ CONFIG_ARCH_TEGRA_124_SOC=y
|
|||
CONFIG_ARM_TEGRA_CPUFREQ=y
|
||||
CONFIG_TRUSTED_FOUNDATIONS=y
|
||||
CONFIG_SERIAL_TEGRA=y
|
||||
CONFIG_TEGRA30_MC=y
|
||||
CONFIG_PCI_TEGRA=y
|
||||
CONFIG_AHCI_TEGRA=m
|
||||
CONFIG_TEGRA_IOMMU_SMMU=y
|
||||
|
@ -359,6 +370,7 @@ CONFIG_SND_SOC_TEGRA_MAX98090=m
|
|||
CONFIG_SND_SOC_TEGRA_RT5640=m
|
||||
CONFIG_SND_SOC_TEGRA30_AHUB=m
|
||||
CONFIG_SND_SOC_TEGRA30_I2S=m
|
||||
CONFIG_SND_SOC_TEGRA_RT5677=m
|
||||
CONFIG_SND_HDA_TEGRA=m
|
||||
CONFIG_TEGRA_HOST1X=m
|
||||
CONFIG_TEGRA_HOST1X_FIREWALL=y
|
||||
|
@ -366,12 +378,13 @@ CONFIG_DRM_TEGRA=m
|
|||
CONFIG_DRM_TEGRA_FBDEV=y
|
||||
# CONFIG_DRM_TEGRA_DEBUG is not set
|
||||
CONFIG_DRM_TEGRA_STAGING=y
|
||||
CONFIG_NOUVEAU_PLATFORM_DRIVER=m
|
||||
CONFIG_NOUVEAU_PLATFORM_DRIVER=y
|
||||
CONFIG_AD525X_DPOT=m
|
||||
CONFIG_AD525X_DPOT_I2C=m
|
||||
CONFIG_AD525X_DPOT_SPI=m
|
||||
CONFIG_TEGRA_SOCTHERM=m
|
||||
CONFIG_TEGRA_MC=y
|
||||
CONFIG_ARM_TEGRA_DEVFREQ=m
|
||||
|
||||
# Jetson TK1
|
||||
CONFIG_PINCTRL_AS3722=y
|
||||
|
@ -390,10 +403,9 @@ CONFIG_DRM_PANEL_SIMPLE=m
|
|||
CONFIG_DRM_PANEL_LD9040=m
|
||||
CONFIG_DRM_PANEL_S6E8AA0=m
|
||||
CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m
|
||||
CONFIG_DRM_DW_HDMI=m
|
||||
|
||||
# regmap
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_REGMAP_I2C=m
|
||||
CONFIG_REGMAP_SPI=m
|
||||
CONFIG_REGMAP_SPMI=m
|
||||
CONFIG_REGMAP_MMIO=m
|
||||
|
@ -410,12 +422,11 @@ CONFIG_USB_OTG=y
|
|||
CONFIG_USB_GADGET=m
|
||||
CONFIG_USB_GADGET_VBUS_DRAW=100
|
||||
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
|
||||
# Use PIO on musb as upstream doesn't support multiple DMA engines yet :-/
|
||||
CONFIG_MUSB_PIO_ONLY=y
|
||||
# CONFIG_USB_GADGET_XILINX is not set
|
||||
CONFIG_USB_MUSB_HDRC=m
|
||||
CONFIG_USB_MUSB_DUAL_ROLE=y
|
||||
CONFIG_USB_MUSB_DSPS=m
|
||||
# Use PIO on musb as upstream doesn't support multiple DMA engines yet :-/
|
||||
CONFIG_MUSB_PIO_ONLY=y
|
||||
# CONFIG_USB_MUSB_TUSB6010 is not set
|
||||
# CONFIG_USB_MUSB_UX500 is not set
|
||||
CONFIG_USB_GPIO_VBUS=m
|
||||
|
@ -435,6 +446,7 @@ CONFIG_USB_CONFIGFS_SERIAL=y
|
|||
# CONFIG_USB_CONFIGFS_F_UAC2 is not set
|
||||
# CONFIG_USB_CONFIGFS_F_MIDI is not set
|
||||
# CONFIG_USB_CONFIGFS_F_HID is not set
|
||||
# CONFIG_USB_CONFIGFS_F_UVC is not set
|
||||
|
||||
# CONFIG_USB_GADGET_DEBUG is not set
|
||||
# CONFIG_USB_GADGET_DEBUG_FILES is not set
|
||||
|
@ -549,11 +561,6 @@ CONFIG_CRYPTO_SHA512_ARM_NEON=m
|
|||
CONFIG_TI_PRIV_EDMA=y
|
||||
CONFIG_TI_EDMA=y
|
||||
|
||||
# EDAC
|
||||
CONFIG_EDAC=y
|
||||
CONFIG_EDAC_MM_EDAC=m
|
||||
CONFIG_EDAC_LEGACY_SYSFS=y
|
||||
|
||||
# Watchdog
|
||||
|
||||
# Mailbox
|
||||
|
@ -588,32 +595,6 @@ CONFIG_MTD_ST_SPI_FSM=m
|
|||
CONFIG_EEPROM_AT25=m
|
||||
CONFIG_EEPROM_93XX46=m
|
||||
|
||||
# MMC/SD
|
||||
CONFIG_MMC_SPI=m
|
||||
|
||||
# Designware (used by numerous devices)
|
||||
CONFIG_MMC_DW=m
|
||||
CONFIG_MMC_DW_PLTFM=m
|
||||
CONFIG_MMC_DW_PCI=m
|
||||
CONFIG_SPI_DW_MMIO=m
|
||||
CONFIG_SPI_DW_PCI=m
|
||||
# CONFIG_MMC_DW_IDMAC is not set
|
||||
# CONFIG_MMC_DW_K3 is not set
|
||||
# CONFIG_MMC_QCOM_DML is not set
|
||||
CONFIG_USB_DWC2=m
|
||||
CONFIG_USB_DWC2_DUAL_ROLE=y
|
||||
CONFIG_USB_DWC2_PLATFORM=m
|
||||
CONFIG_USB_DWC2_PCI=m
|
||||
# CONFIG_USB_DWC2_DEBUG is not set
|
||||
# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
|
||||
CONFIG_USB_DWC3=m
|
||||
CONFIG_USB_DWC3_DUAL_ROLE=y
|
||||
CONFIG_USB_DWC3_PCI=m
|
||||
# CONFIG_USB_DWC3_DEBUG is not set
|
||||
# CONFIG_DWC3_HOST_USB3_LPM_ENABLE is not set
|
||||
CONFIG_DW_WATCHDOG=m
|
||||
CONFIG_PCIE_DW=y
|
||||
|
||||
# Sound
|
||||
CONFIG_SND_ARM=y
|
||||
CONFIG_SND_SOC_AC97_BUS=y
|
||||
|
@ -787,6 +768,9 @@ CONFIG_KEYBOARD_CROS_EC=m
|
|||
CONFIG_I2C_CROS_EC_TUNNEL=m
|
||||
CONFIG_SND_SOC_TS3A227E=m
|
||||
|
||||
CONFIG_R8188EU=m
|
||||
# CONFIG_88EU_AP_MODE is not set
|
||||
|
||||
# Needs work/investigation
|
||||
# CONFIG_ARM_KPROBES_TEST is not set
|
||||
|
||||
|
@ -817,6 +801,7 @@ CONFIG_SND_SOC_TS3A227E=m
|
|||
# CONFIG_SERIAL_IFX6X60 is not set
|
||||
# CONFIG_SERIAL_BCM63XX is not set
|
||||
# CONFIG_FB_XILINX is not set
|
||||
# CONFIG_USB_GADGET_XILINX is not set
|
||||
# CONFIG_BRCMSTB_GISB_ARB is not set
|
||||
# CONFIG_SUNGEM is not set
|
||||
# CONFIG_FB_SAVAGE is not set
|
||||
|
@ -830,7 +815,6 @@ CONFIG_SND_SOC_TS3A227E=m
|
|||
# CONFIG_MMC_TMIO is not set
|
||||
# CONFIG_PINCTRL_IMX35 is not set
|
||||
# CONFIG_DVB_USB_PCTV452E is not set
|
||||
# CONFIG_DWMAC_SOCFPGA is not set
|
||||
|
||||
# CONFIG_MFD_LP8788 is not set
|
||||
# CONFIG_MFD_MAX77693 is not set
|
||||
|
@ -841,6 +825,11 @@ CONFIG_SND_SOC_TS3A227E=m
|
|||
# CONFIG_MFD_AS3711 is not set
|
||||
# CONFIG_PMIC_DA903X is not set
|
||||
# CONFIG_PMIC_ADP5520 is not set
|
||||
# CONFIG_INPUT_REGULATOR_HAPTIC is not set
|
||||
# CONFIG_INPUT_AXP20X_PEK is not set
|
||||
# CONFIG_POWER_RESET_BRCMSTB is not set
|
||||
# CONFIG_INPUT_TPS65218_PWRBUTTON is not set
|
||||
# CONFIG_CLK_QORIQ is not set
|
||||
|
||||
# Debug options. We need to deal with them at some point like x86
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
|
|
|
@ -82,3 +82,4 @@ CONFIG_GPIO_SYSCON=m
|
|||
# CONFIG_SND_SOC_TEGRA20_AC97 is not set
|
||||
# CONFIG_SND_SOC_TEGRA20_DAS is not set
|
||||
# CONFIG_SND_SOC_TEGRA20_SPDIF is not set
|
||||
# CONFIG_SND_SOC_TEGRA_RT5677 is not set
|
||||
|
|
109
config-generic
109
config-generic
|
@ -74,6 +74,7 @@ CONFIG_SLUB=y
|
|||
CONFIG_SLUB_CPU_PARTIAL=y
|
||||
# CONFIG_SLUB_STATS is not set
|
||||
# CONFIG_SLUB_DEBUG_ON is not set
|
||||
# CONFIG_KASAN is not set
|
||||
|
||||
# CONFIG_AD525X_DPOT is not set
|
||||
|
||||
|
@ -147,9 +148,8 @@ CONFIG_MMC_REALTEK_USB=m
|
|||
CONFIG_MMC_VUB300=m
|
||||
CONFIG_MMC_TOSHIBA_PCI=m
|
||||
# CONFIG_MMC_SPI is not set
|
||||
# CONFIG_MMC_SDHCI_PXAV2 is not set
|
||||
# CONFIG_MMC_SDHCI_PXAV3 is not set
|
||||
# CONFIG_MMC_SDHCI_OF_ARASAN is not set
|
||||
# CONFIG_MMC_SDHCI_F_SDH30 is not set
|
||||
# CONFIG_MMC_USDHI6ROL0 is not set
|
||||
|
||||
|
||||
|
@ -201,6 +201,7 @@ CONFIG_BINFMT_MISC=m
|
|||
#
|
||||
|
||||
# CONFIG_COMMON_CLK_SI5351 is not set
|
||||
# CONFIG_COMMON_CLK_CDCE706 is not set
|
||||
|
||||
#
|
||||
# Generic Driver Options
|
||||
|
@ -214,6 +215,9 @@ CONFIG_EXTRA_FIRMWARE=""
|
|||
# CONFIG_FW_LOADER_USER_HELPER is not set
|
||||
# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
|
||||
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_REGMAP_I2C=m
|
||||
|
||||
# CONFIG_CMA is not set
|
||||
# CONFIG_DMA_CMA is not set
|
||||
# CONFIG_FENCE_TRACE is not set
|
||||
|
@ -306,6 +310,7 @@ CONFIG_MTD_CFI_I2=y
|
|||
# CONFIG_MTD_ONENAND is not set
|
||||
# CONFIG_MTD_NAND_ECC_BCH is not set
|
||||
# CONFIG_MTD_NAND_DISKONCHIP is not set
|
||||
# CONFIG_MTD_NAND_HISI504 is not set
|
||||
# CONFIG_MTD_LPDDR is not set
|
||||
CONFIG_MTD_UBI=m
|
||||
CONFIG_MTD_UBI_WL_THRESHOLD=4096
|
||||
|
@ -380,6 +385,7 @@ CONFIG_BLK_DEV_THROTTLING=y
|
|||
CONFIG_SCSI_VIRTIO=m
|
||||
CONFIG_VIRTIO_BLK=m
|
||||
CONFIG_VIRTIO_PCI=m
|
||||
CONFIG_VIRTIO_PCI_LEGACY=y
|
||||
CONFIG_VIRTIO_BALLOON=m
|
||||
CONFIG_VIRTIO_MMIO=m
|
||||
# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set
|
||||
|
@ -529,7 +535,6 @@ CONFIG_SCSI_DC395x=m
|
|||
# CONFIG_SCSI_NSP32 is not set
|
||||
CONFIG_SCSI_WD719X=m
|
||||
CONFIG_SCSI_DEBUG=m
|
||||
CONFIG_SCSI_DC390T=m
|
||||
CONFIG_SCSI_QLA_FC=m
|
||||
CONFIG_TCM_QLA2XXX=m
|
||||
CONFIG_SCSI_QLA_ISCSI=m
|
||||
|
@ -1143,7 +1148,6 @@ CONFIG_IP_DCCP_CCID3=y
|
|||
# TIPC Configuration (EXPERIMENTAL)
|
||||
#
|
||||
CONFIG_TIPC=m
|
||||
CONFIG_TIPC_PORTS=8192
|
||||
# CONFIG_TIPC_MEDIA_IB is not set
|
||||
|
||||
CONFIG_NETLABEL=y
|
||||
|
@ -1212,6 +1216,8 @@ CONFIG_NET_ACT_POLICE=m
|
|||
CONFIG_NET_ACT_SIMP=m
|
||||
CONFIG_NET_ACT_SKBEDIT=m
|
||||
CONFIG_NET_ACT_VLAN=m
|
||||
CONFIG_NET_ACT_BPF=m
|
||||
CONFIG_NET_ACT_CONNMARK=m
|
||||
|
||||
CONFIG_DCB=y
|
||||
CONFIG_DNS_RESOLVER=m
|
||||
|
@ -1421,6 +1427,7 @@ CONFIG_IXGBEVF=m
|
|||
CONFIG_IXGBE=m
|
||||
CONFIG_IXGBE_DCA=y
|
||||
CONFIG_IXGBE_DCB=y
|
||||
CONFIG_IXGBE_VXLAN=y
|
||||
CONFIG_IXGBE_HWMON=y
|
||||
CONFIG_I40E=m
|
||||
CONFIG_I40E_VXLAN=y
|
||||
|
@ -1521,8 +1528,6 @@ CONFIG_NET_VENDOR_STMICRO=y
|
|||
CONFIG_STMMAC_ETH=m
|
||||
# CONFIG_STMMAC_PLATFORM is not set
|
||||
# CONFIG_STMMAC_PCI is not set
|
||||
# CONFIG_STMMAC_DA is not set
|
||||
# CONFIG_STMMAC_DEBUG_FS is not set
|
||||
|
||||
CONFIG_NET_VENDOR_SUN=y
|
||||
CONFIG_HAPPYMEAL=m
|
||||
|
@ -1535,6 +1540,7 @@ CONFIG_TEHUTI=m
|
|||
|
||||
CONFIG_NET_VENDOR_TI=y
|
||||
CONFIG_TLAN=m
|
||||
# CONFIG_TI_CPSW_ALE is not set
|
||||
|
||||
CONFIG_NET_VENDOR_VIA=y
|
||||
CONFIG_VIA_RHINE=m
|
||||
|
@ -1840,6 +1846,7 @@ CONFIG_MWIFIEX_PCIE=m
|
|||
CONFIG_MWIFIEX_USB=m
|
||||
|
||||
CONFIG_IEEE802154=m
|
||||
CONFIG_IEEE802154_SOCKET=m
|
||||
CONFIG_IEEE802154_6LOWPAN=m
|
||||
CONFIG_IEEE802154_DRIVERS=m
|
||||
CONFIG_IEEE802154_FAKELB=m
|
||||
|
@ -1964,6 +1971,7 @@ CONFIG_BT=m
|
|||
CONFIG_BT_BREDR=y
|
||||
CONFIG_BT_LE=y
|
||||
CONFIG_BT_6LOWPAN=m
|
||||
# CONFIG_BT_SELFTEST is not set
|
||||
CONFIG_BT_SCO=y
|
||||
CONFIG_BT_CMTP=m
|
||||
CONFIG_BT_RFCOMM=m
|
||||
|
@ -2309,6 +2317,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
|
|||
# CONFIG_TOUCHSCREEN_AR1021_I2C is not set
|
||||
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_E3X0_BUTTON=m
|
||||
CONFIG_INPUT_PCSPKR=m
|
||||
CONFIG_INPUT_RETU_PWRBUTTON=m
|
||||
CONFIG_INPUT_UINPUT=m
|
||||
|
@ -2357,7 +2366,7 @@ CONFIG_TCG_TIS=m
|
|||
CONFIG_TCG_NSC=m
|
||||
CONFIG_TCG_ATMEL=m
|
||||
# CONFIG_TCG_INFINEON is not set
|
||||
# CONFIG_TCG_ST33_I2C is not set
|
||||
# CONFIG_TCG_TIS_I2C_ST33 is not set
|
||||
# CONFIG_TCG_XEN is not set
|
||||
CONFIG_TELCLOCK=m
|
||||
|
||||
|
@ -2402,6 +2411,7 @@ CONFIG_SERIAL_ARC=m
|
|||
CONFIG_SERIAL_ARC_NR_PORTS=1
|
||||
# CONFIG_SERIAL_RP2 is not set
|
||||
# CONFIG_SERIAL_FSL_LPUART is not set
|
||||
# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set
|
||||
# CONFIG_SERIAL_ST_ASC is not set
|
||||
# CONFIG_SERIAL_PCH_UART is not set
|
||||
# CONFIG_SERIAL_MAX3100 is not set
|
||||
|
@ -2664,6 +2674,7 @@ CONFIG_IIO_INTERRUPT_TRIGGER=m
|
|||
CONFIG_HID_SENSOR_IIO_COMMON=m
|
||||
CONFIG_HID_SENSOR_IIO_TRIGGER=m
|
||||
# CONFIG_IIO_SYSFS_TRIGGER is not set
|
||||
# CONFIG_IIO_SSP_SENSORHUB is not set
|
||||
# CONFIG_AD5446 is not set
|
||||
# CONFIG_AD5380 is not set
|
||||
# CONFIG_AD5064 is not set
|
||||
|
@ -2675,7 +2686,8 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m
|
|||
# CONFIG_MCP4725 is not set
|
||||
# CONFIG_ITG3200 is not set
|
||||
# CONFIG_APDS9300 is not set
|
||||
# CONFIG_CM32181 is not set
|
||||
CONFIG_CM32181=m
|
||||
# CONFIG_CM3232 is not set
|
||||
# CONFIG_CM36651 is not set
|
||||
# CONFIG_GP2AP020A00F is not set
|
||||
# CONFIG_TSL2583 is not set
|
||||
|
@ -2688,6 +2700,7 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m
|
|||
# CONFIG_TI_ADC128S052 is not set
|
||||
# CONFIG_VIPERBOARD_ADC is not set
|
||||
# CONFIG_VF610_ADC is not set
|
||||
# CONFIG_CC10001_ADC is not set
|
||||
# CONFIG_INV_MPU6050_IIO is not set
|
||||
CONFIG_IIO_ST_GYRO_3AXIS=m
|
||||
CONFIG_IIO_ST_MAGN_3AXIS=m
|
||||
|
@ -2708,6 +2721,8 @@ CONFIG_HID_SENSOR_DEVICE_ROTATION=m
|
|||
# CONFIG_IIO_ST_PRESS is not set
|
||||
# CONFIG_KXSD9 is not set
|
||||
# CONFIG_MMA8452 is not set
|
||||
# CONFIG_MMA9551 is not set
|
||||
# CONFIG_MMA9553 is not set
|
||||
# CONFIG_AD7266 is not set
|
||||
# CONFIG_AD7298 is not set
|
||||
# CONFIG_AD7476 is not set
|
||||
|
@ -2734,6 +2749,7 @@ CONFIG_HID_SENSOR_DEVICE_ROTATION=m
|
|||
# CONFIG_ADIS16130 is not set
|
||||
# CONFIG_ADIS16136 is not set
|
||||
# CONFIG_ADIS16260 is not set
|
||||
# CONFIG_KMX61 is not set
|
||||
# CONFIG_ADXRS450 is not set
|
||||
# CONFIG_BMG160 is not set
|
||||
# CONFIG_ADIS16400 is not set
|
||||
|
@ -2744,8 +2760,10 @@ CONFIG_HID_SENSOR_DEVICE_ROTATION=m
|
|||
# CONFIG_SI7005 is not set
|
||||
# CONFIG_SI7020 is not set
|
||||
# CONFIG_AS3935 is not set
|
||||
# CONFIG_SX9500 is not set
|
||||
CONFIG_KXCJK1013=m
|
||||
# CONFIG_ISL29125 is not set
|
||||
# CONFIG_JSA1212 is not set
|
||||
# CONFIG_TCS3414 is not set
|
||||
# CONFIG_AK09911 is not set
|
||||
# CONFIG_T5403 is not set
|
||||
|
@ -2904,6 +2922,9 @@ CONFIG_RTC_DRV_CMOS=y
|
|||
CONFIG_RTC_DRV_DS1307=m
|
||||
CONFIG_RTC_DRV_DS1511=m
|
||||
CONFIG_RTC_DRV_DS1553=m
|
||||
CONFIG_RTC_DRV_DS1685_FAMILY=m
|
||||
# CONFIG_RTC_DS1685_PROC_REGS is not set
|
||||
CONFIG_RTC_DS1685_SYSFS_REGS=y
|
||||
CONFIG_RTC_DRV_DS1672=m
|
||||
CONFIG_RTC_DRV_DS1742=m
|
||||
CONFIG_RTC_DRV_DS1374=m
|
||||
|
@ -2964,6 +2985,7 @@ CONFIG_RTC_DRV_PCF85063=m
|
|||
# CONFIG_RTC_DRV_MOXART is not set
|
||||
# CONFIG_RTC_DRV_ISL12057 is not set
|
||||
# CONFIG_RTC_DRV_XGENE is not set
|
||||
# CONFIG_RTC_DRV_ABB5ZES3 is not set
|
||||
|
||||
CONFIG_R3964=m
|
||||
# CONFIG_APPLICOM is not set
|
||||
|
@ -3020,6 +3042,9 @@ CONFIG_DRM_VMWGFX_FBCON=y
|
|||
CONFIG_DRM_QXL=m
|
||||
CONFIG_DRM_BOCHS=m
|
||||
CONFIG_DRM_PTN3460=m
|
||||
# CONFIG_DRM_PANEL is not set
|
||||
# CONFIG_DRM_PANEL_SIMPLE is not set
|
||||
# CONFIG_DRM_PANEL_S6E8AA0 is not set
|
||||
|
||||
#
|
||||
# PCMCIA character devices
|
||||
|
@ -3050,7 +3075,6 @@ CONFIG_MEDIA_CONTROLLER=y
|
|||
CONFIG_VIDEO_DEV=m
|
||||
# CONFIG_VIDEO_ADV_DEBUG is not set
|
||||
CONFIG_VIDEO_V4L2=y
|
||||
# CONFIG_VIDEO_V4L2_INT_DEVICE is not set
|
||||
CONFIG_VIDEO_V4L2_SUBDEV_API=y
|
||||
# CONFIG_VIDEO_VIVI is not set
|
||||
# CONFIG_USB_SI4713 is not set
|
||||
|
@ -3068,13 +3092,11 @@ CONFIG_VIDEO_V4L2_SUBDEV_API=y
|
|||
CONFIG_VIDEO_AU0828=m
|
||||
CONFIG_VIDEO_AU0828_V4L2=y
|
||||
CONFIG_VIDEO_BT848=m
|
||||
CONFIG_VIDEO_BWQCAM=m
|
||||
CONFIG_VIDEO_SR030PC30=m
|
||||
CONFIG_VIDEO_NOON010PC30=m
|
||||
CONFIG_VIDEO_CAFE_CCIC=m
|
||||
# CONFIG_VIDEO_CPIA is not set
|
||||
CONFIG_VIDEO_CPIA2=m
|
||||
CONFIG_VIDEO_CQCAM=m
|
||||
CONFIG_VIDEO_CX23885=m
|
||||
CONFIG_MEDIA_ALTERA_CI=m
|
||||
CONFIG_VIDEO_CX18=m
|
||||
|
@ -3101,7 +3123,6 @@ CONFIG_VIDEO_IVTV=m
|
|||
CONFIG_VIDEO_MEYE=m
|
||||
CONFIG_VIDEO_MXB=m
|
||||
CONFIG_VIDEO_PVRUSB2_DVB=y
|
||||
# CONFIG_VIDEO_PMS is not set
|
||||
CONFIG_VIDEO_HDPVR=m
|
||||
CONFIG_VIDEO_SAA6588=m
|
||||
CONFIG_VIDEO_SAA7134=m
|
||||
|
@ -3113,7 +3134,6 @@ CONFIG_VIDEO_USBVISION=m
|
|||
CONFIG_VIDEO_STK1160_COMMON=m
|
||||
CONFIG_VIDEO_STK1160=m
|
||||
CONFIG_VIDEO_STK1160_AC97=y
|
||||
CONFIG_VIDEO_W9966=m
|
||||
CONFIG_VIDEO_ZORAN=m
|
||||
CONFIG_VIDEO_ZORAN_AVS6EYES=m
|
||||
CONFIG_VIDEO_ZORAN_BUZ=m
|
||||
|
@ -3128,7 +3148,6 @@ CONFIG_VIDEO_SAA7164=m
|
|||
CONFIG_VIDEO_TM6000=m
|
||||
CONFIG_VIDEO_TM6000_ALSA=m
|
||||
CONFIG_VIDEO_TM6000_DVB=m
|
||||
CONFIG_VIDEO_TLG2300=m
|
||||
# CONFIG_VIDEO_TIMBERDALE is not set
|
||||
# CONFIG_VIDEO_M5MOLS is not set
|
||||
# CONFIG_VIDEO_TW68 is not set
|
||||
|
@ -3252,7 +3271,6 @@ CONFIG_DVB_HOPPER=m
|
|||
CONFIG_VIDEO_SAA7146=m
|
||||
CONFIG_VIDEO_SAA7146_VV=m
|
||||
CONFIG_VIDEO_TUNER=m
|
||||
CONFIG_VIDEO_BTCX=m
|
||||
CONFIG_VIDEO_PVRUSB2=m
|
||||
CONFIG_VIDEO_PVRUSB2_SYSFS=y
|
||||
# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
|
||||
|
@ -3296,8 +3314,6 @@ CONFIG_V4L_MEM2MEM_DRIVERS=y
|
|||
# CONFIG_VIDEO_RENESAS_VSP1 is not set
|
||||
# CONFIG_V4L_TEST_DRIVERS is not set
|
||||
|
||||
# CONFIG_VIDEO_MEM2MEM_TESTDEV is not set
|
||||
|
||||
#
|
||||
# Broadcom Crystal HD video decoder driver
|
||||
#
|
||||
|
@ -3389,6 +3405,8 @@ CONFIG_VGA_CONSOLE=y
|
|||
CONFIG_VGACON_SOFT_SCROLLBACK=y
|
||||
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_DUMMY_CONSOLE_COLUMNS=80
|
||||
CONFIG_DUMMY_CONSOLE_ROWS=25
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||
|
@ -3550,6 +3568,10 @@ CONFIG_SND_USB_UA101=m
|
|||
CONFIG_SND_USB_6FIRE=m
|
||||
CONFIG_SND_USB_HIFACE=m
|
||||
# CONFIG_SND_BCD2000 is not set
|
||||
CONFIG_SND_USB_POD=m
|
||||
CONFIG_SND_USB_PODHD=m
|
||||
CONFIG_SND_USB_TONEPORT=m
|
||||
CONFIG_SND_USB_VARIAX=m
|
||||
|
||||
#
|
||||
# PCMCIA devices
|
||||
|
@ -3557,7 +3579,6 @@ CONFIG_SND_USB_HIFACE=m
|
|||
# CONFIG_SND_PCMCIA is not set
|
||||
|
||||
CONFIG_SND_FIREWIRE=y
|
||||
CONFIG_SND_FIREWIRE_SPEAKERS=m
|
||||
CONFIG_SND_ISIGHT=m
|
||||
CONFIG_SND_SCS1X=m
|
||||
CONFIG_SND_DICE=m
|
||||
|
@ -3598,7 +3619,7 @@ CONFIG_USB_EHCI_TT_NEWSCHED=y
|
|||
# CONFIG_USB_EHCI_MV is not set
|
||||
# CONFIG_USB_EHCI_HCD_PLATFORM is not set
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
# CONFIG_USB_ISP1760_HCD is not set
|
||||
# CONFIG_USB_ISP1760 is not set
|
||||
CONFIG_USB_ISP1362_HCD=m
|
||||
CONFIG_USB_FUSBH200_HCD=m
|
||||
# CONFIG_USB_FOTG210_HCD is not set
|
||||
|
@ -3677,6 +3698,7 @@ CONFIG_HID_MULTITOUCH=m
|
|||
CONFIG_HID_NTRIG=y
|
||||
CONFIG_HID_PLANTRONICS=m
|
||||
CONFIG_HID_PRIMAX=m
|
||||
CONFIG_HID_BETOP_FF=m
|
||||
CONFIG_HID_PRODIKEYS=m
|
||||
CONFIG_HID_DRAGONRISE=m
|
||||
CONFIG_HID_GYRATION=m
|
||||
|
@ -3793,6 +3815,7 @@ CONFIG_USB_GSPCA_NW80X=m
|
|||
CONFIG_USB_GSPCA_VICAM=m
|
||||
CONFIG_USB_GSPCA_KINECT=m
|
||||
CONFIG_USB_GSPCA_SE401=m
|
||||
CONFIG_USB_GSPCA_TOUPTEK=m
|
||||
|
||||
CONFIG_USB_S2255=m
|
||||
# CONFIG_VIDEO_SH_MOBILE_CEU is not set
|
||||
|
@ -4023,6 +4046,8 @@ CONFIG_PCF50633_GPIO=m
|
|||
CONFIG_INPUT_PCF50633_PMU=m
|
||||
CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
|
||||
|
||||
CONFIG_MFD_CORE=m
|
||||
|
||||
CONFIG_MFD_VX855=m
|
||||
CONFIG_MFD_SM501=m
|
||||
CONFIG_MFD_SM501_GPIO=y
|
||||
|
@ -4083,6 +4108,8 @@ CONFIG_MFD_VIPERBOARD=m
|
|||
# CONFIG_MFD_HI6421_PMIC is not set
|
||||
# CONFIG_MFD_RK808 is not set
|
||||
# CONFIG_MFD_RN5T618 is not set
|
||||
# CONFIG_MFD_DA9150 is not set
|
||||
# CONFIG_MFD_RT5033 is not set
|
||||
# CONFIG_EZX_PCAP is not set
|
||||
# CONFIG_INTEL_SOC_PMIC is not set
|
||||
|
||||
|
@ -4132,6 +4159,7 @@ CONFIG_AUTOFS4_FS=y
|
|||
# CONFIG_EXOFS_FS is not set
|
||||
# CONFIG_EXOFS_DEBUG is not set
|
||||
CONFIG_NILFS2_FS=m
|
||||
# CONFIG_FS_DAX is not set
|
||||
# CONFIG_LOGFS is not set
|
||||
CONFIG_CEPH_FS=m
|
||||
CONFIG_CEPH_FSCACHE=y
|
||||
|
@ -4228,6 +4256,7 @@ CONFIG_F2FS_FS_XATTR=y
|
|||
CONFIG_F2FS_FS_POSIX_ACL=y
|
||||
CONFIG_F2FS_FS_SECURITY=y
|
||||
# CONFIG_F2FS_CHECK_FS is not set
|
||||
# CONFIG_F2FS_IO_TRACE is not set
|
||||
|
||||
#
|
||||
# Network File Systems
|
||||
|
@ -4247,6 +4276,7 @@ CONFIG_NFSD=m
|
|||
CONFIG_NFSD_V3=y
|
||||
CONFIG_NFSD_V3_ACL=y
|
||||
CONFIG_NFSD_V4=y
|
||||
CONFIG_NFSD_PNFS=y
|
||||
CONFIG_NFSD_V4_SECURITY_LABEL=y
|
||||
CONFIG_NFS_FSCACHE=y
|
||||
# CONFIG_NFS_USE_LEGACY_DNS is not set
|
||||
|
@ -4465,7 +4495,6 @@ CONFIG_HWPOISON_INJECT=m
|
|||
CONFIG_CROSS_MEMORY_ATTACH=y
|
||||
# CONFIG_DEBUG_SECTION_MISMATCH is not set
|
||||
# CONFIG_BACKTRACE_SELF_TEST is not set
|
||||
CONFIG_RESOURCE_COUNTERS=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
# CONFIG_DEBUG_VIRTUAL is not set
|
||||
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
|
||||
|
@ -4480,6 +4509,7 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
|
|||
CONFIG_KGDB_TESTS=y
|
||||
CONFIG_KGDB_LOW_LEVEL_TRAP=y
|
||||
# CONFIG_KGDB_TESTS_ON_BOOT is not set
|
||||
# CONFIG_GDB_SCRIPTS is not set
|
||||
|
||||
|
||||
#
|
||||
|
@ -4502,7 +4532,8 @@ CONFIG_SECURITY_SELINUX_AVC_STATS=y
|
|||
# CONFIG_SECURITY_SMACK is not set
|
||||
# CONFIG_SECURITY_TOMOYO is not set
|
||||
# CONFIG_SECURITY_APPARMOR is not set
|
||||
# CONFIG_SECURITY_YAMA is not set
|
||||
CONFIG_SECURITY_YAMA=y
|
||||
CONFIG_SECURITY_YAMA_STACKED=y
|
||||
CONFIG_AUDIT=y
|
||||
CONFIG_AUDITSYSCALL=y
|
||||
# http://lists.fedoraproject.org/pipermail/kernel/2013-February/004125.html
|
||||
|
@ -4518,6 +4549,7 @@ CONFIG_CRYPTO=y
|
|||
CONFIG_CRYPTO_FIPS=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=y
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=y
|
||||
CONFIG_CRYPTO_USER_API_RNG=y
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
# Note, CONFIG_CRYPTO_MANAGER_DISABLE_TESTS needs to be unset, or FIPS will be disabled.
|
||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
||||
|
@ -4622,14 +4654,11 @@ CONFIG_RD_XZ=y
|
|||
CONFIG_RD_LZO=y
|
||||
CONFIG_RD_LZ4=y
|
||||
|
||||
CONFIG_INIT_FALLBACK=y
|
||||
|
||||
CONFIG_KEYS=y
|
||||
CONFIG_PERSISTENT_KEYRINGS=y
|
||||
CONFIG_BIG_KEYS=y
|
||||
CONFIG_TRUSTED_KEYS=m
|
||||
CONFIG_ENCRYPTED_KEYS=m
|
||||
CONFIG_KEYS_DEBUG_PROC_KEYS=y
|
||||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_CDROM_PKTCDVD_BUFFERS=8
|
||||
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
|
||||
|
@ -4739,7 +4768,6 @@ CONFIG_PM_DEBUG=y
|
|||
CONFIG_PM_TRACE=y
|
||||
CONFIG_PM_TRACE_RTC=y
|
||||
# CONFIG_PM_TEST_SUSPEND is not set
|
||||
CONFIG_PM_RUNTIME=y
|
||||
# CONFIG_PM_OPP is not set
|
||||
# CONFIG_PM_AUTOSLEEP is not set
|
||||
# CONFIG_PM_WAKELOCKS is not set
|
||||
|
@ -4761,8 +4789,6 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y
|
|||
|
||||
# CONFIG_MOUSE_ATIXL is not set
|
||||
|
||||
# CONFIG_MEDIA_PARPORT_SUPPORT is not set
|
||||
|
||||
CONFIG_RADIO_ADAPTERS=y
|
||||
CONFIG_RADIO_TEA5764=m
|
||||
CONFIG_RADIO_SAA7706H=m
|
||||
|
@ -4867,6 +4893,8 @@ CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
|
|||
# CONFIG_SND_SOC_TLV320AIC23_I2C is not set
|
||||
# CONFIG_SND_SOC_TLV320AIC23_SPI is not set
|
||||
# CONFIG_SND_SOC_TS3A227E is not set
|
||||
# CONFIG_SND_SOC_XTFPGA_I2S is not set
|
||||
# CONFIG_SND_SOC_STA32X is not set
|
||||
|
||||
CONFIG_BALLOON_COMPACTION=y
|
||||
CONFIG_COMPACTION=y
|
||||
|
@ -4874,6 +4902,7 @@ CONFIG_MIGRATION=y
|
|||
CONFIG_BOUNCE=y
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
CONFIG_LEDS_CLASS_FLASH=m
|
||||
# CONFIG_LEDS_LOCOMO is not set
|
||||
# CONFIG_LEDS_NET48XX is not set
|
||||
# CONFIG_LEDS_PCA9532 is not set
|
||||
|
@ -5004,6 +5033,8 @@ CONFIG_APM_POWER=m
|
|||
CONFIG_POWER_RESET=y
|
||||
# CONFIG_POWER_RESET_LTC2952 is not set
|
||||
# CONFIG_POWER_RESET_SYSCON is not set
|
||||
# CONFIG_BATTERY_GAUGE_LTC2941 is not set
|
||||
# CONFIG_POWER_RESET_RESTART is not set
|
||||
|
||||
# CONFIG_PDA_POWER is not set
|
||||
|
||||
|
@ -5028,7 +5059,6 @@ CONFIG_VFIO_PCI=m
|
|||
# LIRC
|
||||
CONFIG_LIRC_STAGING=y
|
||||
CONFIG_LIRC_BT829=m
|
||||
CONFIG_LIRC_IGORPLUGUSB=m
|
||||
CONFIG_LIRC_IMON=m
|
||||
CONFIG_LIRC_ZILOG=m
|
||||
CONFIG_LIRC_PARALLEL=m
|
||||
|
@ -5039,6 +5069,7 @@ CONFIG_LIRC_SIR=m
|
|||
|
||||
# CONFIG_SAMPLES is not set
|
||||
|
||||
CONFIG_DEVMEM=y
|
||||
# CONFIG_DEVKMEM is not set
|
||||
|
||||
CONFIG_NOZOMI=m
|
||||
|
@ -5053,7 +5084,6 @@ CONFIG_INPUT_GP2A=m
|
|||
CONFIG_ENCLOSURE_SERVICES=m
|
||||
CONFIG_IPWIRELESS=m
|
||||
|
||||
# CONFIG_BLK_DEV_XIP is not set
|
||||
CONFIG_MEMSTICK=m
|
||||
# CONFIG_MEMSTICK_DEBUG is not set
|
||||
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
|
||||
|
@ -5130,14 +5160,12 @@ CONFIG_STAGING_MEDIA=y
|
|||
# CONFIG_FB_XGI is not set
|
||||
# CONFIG_VIDEO_GO7007 is not set
|
||||
# CONFIG_I2C_BCM2048 is not set
|
||||
# CONFIG_VIDEO_TCM825X is not set
|
||||
# CONFIG_DT3155 is not set
|
||||
# CONFIG_PRISM2_USB is not set
|
||||
# CONFIG_ECHO is not set
|
||||
CONFIG_USB_ATMEL=m
|
||||
# CONFIG_COMEDI is not set
|
||||
# CONFIG_PANEL is not set
|
||||
# CONFIG_LINE6_USB is not set
|
||||
# CONFIG_VME_BUS is not set
|
||||
# CONFIG_VT6656 is not set
|
||||
# Larry Finger maintains these (rhbz 913753)
|
||||
|
@ -5156,11 +5184,9 @@ CONFIG_R8723AU=m # Jes Sorensen maintains this (rhbz 1100162)
|
|||
# CONFIG_SOLO6X10 is not set
|
||||
# CONFIG_LTE_GDM724X is not set
|
||||
CONFIG_R8712U=m # Larry Finger maintains this (rhbz 699618)
|
||||
# CONFIG_BCM_WIMAX is not set
|
||||
# CONFIG_FT1000 is not set
|
||||
# CONFIG_SPEAKUP is not set
|
||||
# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set
|
||||
# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set
|
||||
CONFIG_ALTERA_STAPL=m
|
||||
# CONFIG_DVB_CXD2099 is not set
|
||||
# CONFIG_DVB_RTL2832_SDR is not set
|
||||
|
@ -5183,9 +5209,10 @@ CONFIG_USBIP_HOST=m
|
|||
# CONFIG_UNISYSSPAR is not set
|
||||
# CONFIG_MEDIA_TUNER_MSI001 is not set
|
||||
# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set
|
||||
# CONFIG_VIDEO_SAA7191 is not set
|
||||
# CONFIG_DVB_MN88472 is not set
|
||||
# CONFIG_DVB_MN88473 is not set
|
||||
# CONFIG_FB_SM7XX is not set
|
||||
# CONFIG_FB_TFT is not set
|
||||
# END OF STAGING
|
||||
|
||||
#
|
||||
|
@ -5219,8 +5246,11 @@ CONFIG_RCU_TORTURE_TEST=m
|
|||
# CONFIG_RCU_CPU_STALL_INFO is not set
|
||||
# CONFIG_TASKS_RCU is not set
|
||||
# CONFIG_RCU_USER_QS is not set
|
||||
CONFIG_RCU_KTHREAD_PRIO=0
|
||||
CONFIG_SPARSE_RCU_POINTER=y
|
||||
|
||||
# CONFIG_LIVEPATCH is not set
|
||||
|
||||
CONFIG_KSM=y
|
||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
|
||||
|
||||
|
@ -5251,6 +5281,7 @@ CONFIG_FRONTSWAP=y
|
|||
CONFIG_ZSWAP=y
|
||||
CONFIG_ZBUD=y
|
||||
CONFIG_ZSMALLOC=y
|
||||
# CONFIG_ZSMALLOC_STAT is not set
|
||||
# CONFIG_PGTABLE_MAPPING is not set
|
||||
|
||||
# CONFIG_MDIO_GPIO is not set
|
||||
|
@ -5298,6 +5329,7 @@ CONFIG_GPIO_VIPERBOARD=m
|
|||
# CONFIG_GPIO_MAX7301 is not set
|
||||
# CONFIG_GPIO_MC33880 is not set
|
||||
# CONFIG_GPIO_MCP23S08 is not set
|
||||
# CONFIG_GPIO_XILINX is not set
|
||||
|
||||
# FIXME: Why?
|
||||
|
||||
|
@ -5328,12 +5360,14 @@ CONFIG_HWSPINLOCK=m
|
|||
CONFIG_PSTORE=y
|
||||
CONFIG_PSTORE_RAM=m
|
||||
# CONFIG_PSTORE_CONSOLE is not set
|
||||
# CONFIG_PSTORE_PMSG is not set
|
||||
# CONFIG_PSTORE_FTRACE is not set
|
||||
|
||||
# CONFIG_TEST_LKM is not set
|
||||
# CONFIG_TEST_USER_COPY is not set
|
||||
# CONFIG_TEST_BPF is not set
|
||||
# CONFIG_TEST_UDELAY is not set
|
||||
# CONFIG_TEST_HEXDUMP is not set
|
||||
# CONFIG_TEST_RHASHTABLE is not set
|
||||
|
||||
# CONFIG_AVERAGE is not set
|
||||
|
@ -5354,8 +5388,11 @@ CONFIG_BCMA_DRIVER_GPIO=y
|
|||
# CONFIG_GOOGLE_FIRMWARE is not set
|
||||
# CONFIG_INTEL_MID_PTI is not set
|
||||
CONFIG_IOMMU_SUPPORT=y
|
||||
# CONFIG_IOMMU_IO_PGTABLE_LPAE is not set
|
||||
# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set
|
||||
|
||||
# CONFIG_MAILBOX is not set
|
||||
# CONFIG_ALTERA_MBOX is not set
|
||||
|
||||
# CONFIG_RESET_CONTROLLER is not set
|
||||
|
||||
|
@ -5375,10 +5412,12 @@ CONFIG_POWERCAP=y
|
|||
# CONFIG_CPU_IDLE is not set
|
||||
|
||||
# CONFIG_ARM_ARCH_TIMER_EVTSTREAM is not set
|
||||
# CONFIG_ASM9260_TIMER is not set
|
||||
|
||||
# CONFIG_HMC_DRV is not set
|
||||
|
||||
# CONFIG_PM_DEVFREQ is not set
|
||||
# CONFIG_PM_DEVFREQ_EVENT is not set
|
||||
# CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND is not set
|
||||
# CONFIG_DEVFREQ_GOV_PERFORMANCE is not set
|
||||
# CONFIG_DEVFREQ_GOV_POWERSAVE is not set
|
||||
|
@ -5403,3 +5442,5 @@ CONFIG_POWERCAP=y
|
|||
|
||||
# set in x86-generic presently
|
||||
# CONFIG_TOUCHSCREEN_GOODIX is not set
|
||||
|
||||
CONFIG_PCI_ECAM=y
|
||||
|
|
|
@ -76,7 +76,6 @@ CONFIG_MEMORY_HOTPLUG=y
|
|||
# CONFIG_ATM_HORIZON is not set
|
||||
# CONFIG_ATM_FIRESTREAM is not set
|
||||
# CONFIG_ATM_AMBASSADOR is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
|
||||
|
||||
|
@ -210,6 +209,10 @@ CONFIG_EXTRA_TARGETS=""
|
|||
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
|
||||
CONFIG_MLX4_EN=m
|
||||
CONFIG_MLX4_EN_DCB=y
|
||||
CONFIG_MLX4_EN_VXLAN=y
|
||||
|
||||
# CONFIG_SERIO_XILINX_XPS_PS2 is not set
|
||||
|
||||
# CONFIG_PPC_SMLPAR is not set
|
||||
|
@ -333,7 +336,7 @@ CONFIG_I2C_MPC=m
|
|||
|
||||
# CONFIG_CPU_IDLE is not set
|
||||
# CONFIG_OF_UNITTEST is not set
|
||||
# CONFIG_OF_SELFTEST is not set
|
||||
# CONFIG_OF_OVERLAY is not set
|
||||
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
|
||||
# CONFIG_INPUT_GP2A is not set
|
||||
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
|
||||
|
|
|
@ -34,7 +34,6 @@ CONFIG_HVCS=m
|
|||
CONFIG_HVC_CONSOLE=y
|
||||
# CONFIG_HVC_OLD_HVSI is not set
|
||||
CONFIG_HOTPLUG_PCI=y
|
||||
CONFIG_THERM_PM72=y
|
||||
CONFIG_IBMVETH=m
|
||||
CONFIG_SCSI_IBMVSCSI=m
|
||||
# CONFIG_HOTPLUG_PCI_CPCI is not set
|
||||
|
|
|
@ -28,7 +28,6 @@ CONFIG_HVCS=m
|
|||
CONFIG_HVC_CONSOLE=y
|
||||
# CONFIG_HVC_OLD_HVSI is not set
|
||||
CONFIG_HOTPLUG_PCI=y
|
||||
CONFIG_THERM_PM72=y
|
||||
CONFIG_IBMVETH=m
|
||||
CONFIG_SCSI_IBMVSCSI=m
|
||||
# CONFIG_HOTPLUG_PCI_CPCI is not set
|
||||
|
|
|
@ -206,6 +206,7 @@ CONFIG_VMCP=y
|
|||
|
||||
CONFIG_SCHED_MC=y
|
||||
CONFIG_SCHED_BOOK=y
|
||||
CONFIG_SCHED_TOPOLOGY=y
|
||||
|
||||
# CONFIG_WARN_DYNAMIC_STACK is not set
|
||||
|
||||
|
@ -301,6 +302,7 @@ CONFIG_HOTPLUG_PCI_S390=y
|
|||
|
||||
CONFIG_MLX4_EN=m
|
||||
CONFIG_MLX4_EN_DCB=y
|
||||
CONFIG_MLX4_EN_VXLAN=y
|
||||
CONFIG_INFINIBAND=m
|
||||
CONFIG_INFINIBAND_USER_ACCESS=m
|
||||
CONFIG_MLX4_INFINIBAND=m
|
||||
|
|
|
@ -178,6 +178,7 @@ CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
|
|||
# CONFIG_MMC_SDHCI_OF is not set
|
||||
|
||||
# CONFIG_X86_INTEL_MID is not set
|
||||
# CONFIG_X86_INTEL_QUARK is not set
|
||||
|
||||
CONFIG_MFD_CS5535=m
|
||||
# CONFIG_MFD_SYSCON is not set
|
||||
|
@ -198,7 +199,7 @@ CONFIG_BACKLIGHT_PWM=m
|
|||
# CONFIG_EDAC_SBRIDGE is not set
|
||||
|
||||
# CONFIG_OF_UNITTEST is not set
|
||||
# CONFIG_OF_SELFTEST is not set
|
||||
# CONFIG_OF_OVERLAY is not set
|
||||
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
|
||||
# CONFIG_INPUT_GP2A is not set
|
||||
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
|
||||
|
@ -217,3 +218,4 @@ CONFIG_BACKLIGHT_PWM=m
|
|||
# CONFIG_PINCTRL_IPQ8064 is not set
|
||||
# CONFIG_COMMON_CLK_SI570 is not set
|
||||
# CONFIG_COMMON_CLK_QCOM is not set
|
||||
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
|
||||
|
|
|
@ -40,7 +40,6 @@ CONFIG_X86_PM_TIMER=y
|
|||
|
||||
CONFIG_EFI=y
|
||||
CONFIG_EFI_STUB=y
|
||||
# CONFIG_EFI_MIXED is not set
|
||||
CONFIG_EFI_VARS=y
|
||||
CONFIG_EFIVAR_FS=y
|
||||
CONFIG_EFI_VARS_PSTORE=y
|
||||
|
@ -130,7 +129,6 @@ CONFIG_GENERIC_ISA_DMA=y
|
|||
|
||||
CONFIG_PCI_MMCONFIG=y
|
||||
CONFIG_PCI_BIOS=y
|
||||
CONFIG_PCI_IOAPIC=y
|
||||
|
||||
CONFIG_HOTPLUG_PCI=y
|
||||
CONFIG_HOTPLUG_PCI_COMPAQ=m
|
||||
|
@ -199,6 +197,7 @@ CONFIG_EDAC_IE31200=m
|
|||
CONFIG_SCHED_MC=y
|
||||
|
||||
CONFIG_TCG_INFINEON=m
|
||||
CONFIG_TCG_CRB=m
|
||||
|
||||
CONFIG_HW_RANDOM_INTEL=m
|
||||
CONFIG_HW_RANDOM_AMD=m
|
||||
|
@ -490,6 +489,9 @@ CONFIG_NFC_MICROREAD_MEI=m
|
|||
# CONFIG_X86_GOLDFISH is not set
|
||||
|
||||
CONFIG_X86_INTEL_LPSS=y
|
||||
|
||||
# CONFIG_X86_AMD_PLATFORM_DEVICE is not set
|
||||
|
||||
CONFIG_IOSF_MBI=m
|
||||
# CONFIG_IOSF_MBI_DEBUG is not set
|
||||
CONFIG_PWM_LPSS=m
|
||||
|
@ -511,6 +513,7 @@ CONFIG_SND_SOC_INTEL_BYT_RT5640_MACH=m
|
|||
CONFIG_SND_SOC_INTEL_BYT_MAX98090_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -24,6 +24,9 @@ CONFIG_PHYSICAL_ALIGN=0x1000000
|
|||
# https://lists.fedoraproject.org/pipermail/kernel/2013-December/004753.html
|
||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
|
||||
|
||||
# enable the 32-bit entry point for Baytrail
|
||||
CONFIG_EFI_MIXED=y
|
||||
|
||||
CONFIG_IA32_EMULATION=y
|
||||
# CONFIG_IA32_AOUT is not set
|
||||
|
||||
|
@ -80,7 +83,6 @@ CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m
|
|||
CONFIG_CRYPTO_DES3_EDE_X86_64=m
|
||||
# staging crypto
|
||||
# CONFIG_CRYPTO_SKEIN is not set
|
||||
# CONFIG_CRYPTO_THREEFISH is not set
|
||||
|
||||
# CONFIG_I2C_ALI1535 is not set
|
||||
# CONFIG_I2C_ALI1563 is not set
|
||||
|
@ -169,6 +171,7 @@ CONFIG_NTB_NETDEV=m
|
|||
CONFIG_IP1000=m
|
||||
CONFIG_MLX4_EN=m
|
||||
CONFIG_MLX4_EN_DCB=y
|
||||
CONFIG_MLX4_EN_VXLAN=y
|
||||
# CONFIG_MLX4_DEBUG is not set
|
||||
CONFIG_SFC=m
|
||||
CONFIG_SFC_MCDI_MON=y
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
From: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
Date: Thu, 29 Jan 2015 14:03:17 -0500
|
||||
Subject: [PATCH] drm/i915: Disable verbose state checks
|
||||
|
||||
For stable releases, we disable the verbose state checks in the i915 driver.
|
||||
They are mostly for development purposes and they fill the retrace server
|
||||
to the point of uselessness. We leave these enabled in rawhide kernels,
|
||||
where they are both more likely to get attention from upstream and more
|
||||
likely to be fixable.
|
||||
|
||||
Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
---
|
||||
drivers/gpu/drm/i915/i915_params.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
|
||||
index db07153b693f..c049fe3fbdff 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_params.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_params.c
|
||||
@@ -51,7 +51,7 @@ struct i915_params i915 __read_mostly = {
|
||||
.disable_vtd_wa = 0,
|
||||
.use_mmio_flip = 0,
|
||||
.mmio_debug = 0,
|
||||
- .verbose_state_checks = 1,
|
||||
+ .verbose_state_checks = 0,
|
||||
};
|
||||
|
||||
module_param_named(modeset, i915.modeset, int, 0400);
|
|
@ -14,15 +14,15 @@ Upstream-status: http://lists.freedesktop.org/archives/intel-gfx/2013-November/0
|
|||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
|
||||
index 33d4d37fd614..6865ef2d3476 100644
|
||||
index f75173c20f47..1003782a38c4 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_display.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
||||
@@ -10873,7 +10873,7 @@ check_crtc_state(struct drm_device *dev)
|
||||
@@ -10917,7 +10917,7 @@ check_crtc_state(struct drm_device *dev)
|
||||
|
||||
if (active &&
|
||||
!intel_pipe_config_compare(dev, &crtc->config, &pipe_config)) {
|
||||
!intel_pipe_config_compare(dev, crtc->config, &pipe_config)) {
|
||||
- I915_STATE_WARN(1, "pipe state doesn't match!\n");
|
||||
+ DRM_DEBUG_KMS("pipe state doesn't match!\n");
|
||||
intel_dump_pipe_config(crtc, &pipe_config,
|
||||
"[hw state]");
|
||||
intel_dump_pipe_config(crtc, &crtc->config,
|
||||
intel_dump_pipe_config(crtc, crtc->config,
|
||||
|
|
|
@ -1,558 +0,0 @@
|
|||
From: Rob Clark <robdclark@gmail.com>
|
||||
Date: Mon, 15 Dec 2014 13:56:32 -0500
|
||||
Subject: [PATCH] drm/i915: tame the chattermouth (v2)
|
||||
|
||||
Many distro's have mechanism in place to collect and automatically file
|
||||
bugs for failed WARN()s. And since i915 has a lot of hw state sanity
|
||||
checks which result in WARN(), it generates quite a lot of noise which
|
||||
is somewhat disconcerting to the end user.
|
||||
|
||||
Separate out the internal hw-is-in-the-state-I-expected checks into
|
||||
I915_STATE_WARN()s and allow configuration via i915.verbose_checks module
|
||||
param about whether this will generate a full blown stacktrace or just
|
||||
DRM_ERROR(). The new moduleparam defaults to true, so by default there
|
||||
is no change in behavior. And even when disabled, you will still get
|
||||
an error message logged.
|
||||
|
||||
v2: paint the macro names blue, clarify that the default behavior
|
||||
remains the same as before
|
||||
|
||||
Signed-off-by: Rob Clark <robdclark@gmail.com>
|
||||
Acked-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
---
|
||||
drivers/gpu/drm/i915/i915_drv.h | 30 ++++++++
|
||||
drivers/gpu/drm/i915/i915_params.c | 5 ++
|
||||
drivers/gpu/drm/i915/intel_display.c | 134 +++++++++++++++++------------------
|
||||
drivers/gpu/drm/i915/intel_dp.c | 4 +-
|
||||
4 files changed, 104 insertions(+), 69 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
|
||||
index 44a3c385eea2..757f000a1d14 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_drv.h
|
||||
+++ b/drivers/gpu/drm/i915/i915_drv.h
|
||||
@@ -60,6 +60,35 @@
|
||||
#undef WARN_ON
|
||||
#define WARN_ON(x) WARN(x, "WARN_ON(" #x ")")
|
||||
|
||||
+/* Use I915_STATE_WARN(x) and I915_STATE_WARN_ON() (rather than WARN() and
|
||||
+ * WARN_ON()) for hw state sanity checks to check for unexpected conditions
|
||||
+ * which may not necessarily be a user visible problem. This will either
|
||||
+ * WARN() or DRM_ERROR() depending on the verbose_checks moduleparam, to
|
||||
+ * enable distros and users to tailor their preferred amount of i915 abrt
|
||||
+ * spam.
|
||||
+ */
|
||||
+#define I915_STATE_WARN(condition, format...) ({ \
|
||||
+ int __ret_warn_on = !!(condition); \
|
||||
+ if (unlikely(__ret_warn_on)) { \
|
||||
+ if (i915.verbose_state_checks) \
|
||||
+ __WARN_printf(format); \
|
||||
+ else \
|
||||
+ DRM_ERROR(format); \
|
||||
+ } \
|
||||
+ unlikely(__ret_warn_on); \
|
||||
+})
|
||||
+
|
||||
+#define I915_STATE_WARN_ON(condition) ({ \
|
||||
+ int __ret_warn_on = !!(condition); \
|
||||
+ if (unlikely(__ret_warn_on)) { \
|
||||
+ if (i915.verbose_state_checks) \
|
||||
+ __WARN_printf("WARN_ON(" #condition ")\n"); \
|
||||
+ else \
|
||||
+ DRM_ERROR("WARN_ON(" #condition ")\n"); \
|
||||
+ } \
|
||||
+ unlikely(__ret_warn_on); \
|
||||
+})
|
||||
+
|
||||
enum pipe {
|
||||
INVALID_PIPE = -1,
|
||||
PIPE_A = 0,
|
||||
@@ -2316,6 +2345,7 @@ struct i915_params {
|
||||
bool disable_vtd_wa;
|
||||
int use_mmio_flip;
|
||||
bool mmio_debug;
|
||||
+ bool verbose_state_checks;
|
||||
};
|
||||
extern struct i915_params i915 __read_mostly;
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
|
||||
index c91cb2033cc5..db07153b693f 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_params.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_params.c
|
||||
@@ -51,6 +51,7 @@ struct i915_params i915 __read_mostly = {
|
||||
.disable_vtd_wa = 0,
|
||||
.use_mmio_flip = 0,
|
||||
.mmio_debug = 0,
|
||||
+ .verbose_state_checks = 1,
|
||||
};
|
||||
|
||||
module_param_named(modeset, i915.modeset, int, 0400);
|
||||
@@ -173,3 +174,7 @@ module_param_named(mmio_debug, i915.mmio_debug, bool, 0600);
|
||||
MODULE_PARM_DESC(mmio_debug,
|
||||
"Enable the MMIO debug code (default: false). This may negatively "
|
||||
"affect performance.");
|
||||
+
|
||||
+module_param_named(verbose_state_checks, i915.verbose_state_checks, bool, 0600);
|
||||
+MODULE_PARM_DESC(verbose_state_checks,
|
||||
+ "Enable verbose logs (ie. WARN_ON()) in case of unexpected hw state conditions.");
|
||||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
|
||||
index 791b00e612d8..33d4d37fd614 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_display.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
||||
@@ -1024,7 +1024,7 @@ void assert_pll(struct drm_i915_private *dev_priv,
|
||||
reg = DPLL(pipe);
|
||||
val = I915_READ(reg);
|
||||
cur_state = !!(val & DPLL_VCO_ENABLE);
|
||||
- WARN(cur_state != state,
|
||||
+ I915_STATE_WARN(cur_state != state,
|
||||
"PLL state assertion failure (expected %s, current %s)\n",
|
||||
state_string(state), state_string(cur_state));
|
||||
}
|
||||
@@ -1040,7 +1040,7 @@ static void assert_dsi_pll(struct drm_i915_private *dev_priv, bool state)
|
||||
mutex_unlock(&dev_priv->dpio_lock);
|
||||
|
||||
cur_state = val & DSI_PLL_VCO_EN;
|
||||
- WARN(cur_state != state,
|
||||
+ I915_STATE_WARN(cur_state != state,
|
||||
"DSI PLL state assertion failure (expected %s, current %s)\n",
|
||||
state_string(state), state_string(cur_state));
|
||||
}
|
||||
@@ -1071,7 +1071,7 @@ void assert_shared_dpll(struct drm_i915_private *dev_priv,
|
||||
return;
|
||||
|
||||
cur_state = pll->get_hw_state(dev_priv, pll, &hw_state);
|
||||
- WARN(cur_state != state,
|
||||
+ I915_STATE_WARN(cur_state != state,
|
||||
"%s assertion failure (expected %s, current %s)\n",
|
||||
pll->name, state_string(state), state_string(cur_state));
|
||||
}
|
||||
@@ -1095,7 +1095,7 @@ static void assert_fdi_tx(struct drm_i915_private *dev_priv,
|
||||
val = I915_READ(reg);
|
||||
cur_state = !!(val & FDI_TX_ENABLE);
|
||||
}
|
||||
- WARN(cur_state != state,
|
||||
+ I915_STATE_WARN(cur_state != state,
|
||||
"FDI TX state assertion failure (expected %s, current %s)\n",
|
||||
state_string(state), state_string(cur_state));
|
||||
}
|
||||
@@ -1112,7 +1112,7 @@ static void assert_fdi_rx(struct drm_i915_private *dev_priv,
|
||||
reg = FDI_RX_CTL(pipe);
|
||||
val = I915_READ(reg);
|
||||
cur_state = !!(val & FDI_RX_ENABLE);
|
||||
- WARN(cur_state != state,
|
||||
+ I915_STATE_WARN(cur_state != state,
|
||||
"FDI RX state assertion failure (expected %s, current %s)\n",
|
||||
state_string(state), state_string(cur_state));
|
||||
}
|
||||
@@ -1135,7 +1135,7 @@ static void assert_fdi_tx_pll_enabled(struct drm_i915_private *dev_priv,
|
||||
|
||||
reg = FDI_TX_CTL(pipe);
|
||||
val = I915_READ(reg);
|
||||
- WARN(!(val & FDI_TX_PLL_ENABLE), "FDI TX PLL assertion failure, should be active but is disabled\n");
|
||||
+ I915_STATE_WARN(!(val & FDI_TX_PLL_ENABLE), "FDI TX PLL assertion failure, should be active but is disabled\n");
|
||||
}
|
||||
|
||||
void assert_fdi_rx_pll(struct drm_i915_private *dev_priv,
|
||||
@@ -1148,7 +1148,7 @@ void assert_fdi_rx_pll(struct drm_i915_private *dev_priv,
|
||||
reg = FDI_RX_CTL(pipe);
|
||||
val = I915_READ(reg);
|
||||
cur_state = !!(val & FDI_RX_PLL_ENABLE);
|
||||
- WARN(cur_state != state,
|
||||
+ I915_STATE_WARN(cur_state != state,
|
||||
"FDI RX PLL assertion failure (expected %s, current %s)\n",
|
||||
state_string(state), state_string(cur_state));
|
||||
}
|
||||
@@ -1190,7 +1190,7 @@ void assert_panel_unlocked(struct drm_i915_private *dev_priv,
|
||||
((val & PANEL_UNLOCK_MASK) == PANEL_UNLOCK_REGS))
|
||||
locked = false;
|
||||
|
||||
- WARN(panel_pipe == pipe && locked,
|
||||
+ I915_STATE_WARN(panel_pipe == pipe && locked,
|
||||
"panel assertion failure, pipe %c regs locked\n",
|
||||
pipe_name(pipe));
|
||||
}
|
||||
@@ -1206,7 +1206,7 @@ static void assert_cursor(struct drm_i915_private *dev_priv,
|
||||
else
|
||||
cur_state = I915_READ(CURCNTR(pipe)) & CURSOR_MODE;
|
||||
|
||||
- WARN(cur_state != state,
|
||||
+ I915_STATE_WARN(cur_state != state,
|
||||
"cursor on pipe %c assertion failure (expected %s, current %s)\n",
|
||||
pipe_name(pipe), state_string(state), state_string(cur_state));
|
||||
}
|
||||
@@ -1236,7 +1236,7 @@ void assert_pipe(struct drm_i915_private *dev_priv,
|
||||
cur_state = !!(val & PIPECONF_ENABLE);
|
||||
}
|
||||
|
||||
- WARN(cur_state != state,
|
||||
+ I915_STATE_WARN(cur_state != state,
|
||||
"pipe %c assertion failure (expected %s, current %s)\n",
|
||||
pipe_name(pipe), state_string(state), state_string(cur_state));
|
||||
}
|
||||
@@ -1251,7 +1251,7 @@ static void assert_plane(struct drm_i915_private *dev_priv,
|
||||
reg = DSPCNTR(plane);
|
||||
val = I915_READ(reg);
|
||||
cur_state = !!(val & DISPLAY_PLANE_ENABLE);
|
||||
- WARN(cur_state != state,
|
||||
+ I915_STATE_WARN(cur_state != state,
|
||||
"plane %c assertion failure (expected %s, current %s)\n",
|
||||
plane_name(plane), state_string(state), state_string(cur_state));
|
||||
}
|
||||
@@ -1271,7 +1271,7 @@ static void assert_planes_disabled(struct drm_i915_private *dev_priv,
|
||||
if (INTEL_INFO(dev)->gen >= 4) {
|
||||
reg = DSPCNTR(pipe);
|
||||
val = I915_READ(reg);
|
||||
- WARN(val & DISPLAY_PLANE_ENABLE,
|
||||
+ I915_STATE_WARN(val & DISPLAY_PLANE_ENABLE,
|
||||
"plane %c assertion failure, should be disabled but not\n",
|
||||
plane_name(pipe));
|
||||
return;
|
||||
@@ -1283,7 +1283,7 @@ static void assert_planes_disabled(struct drm_i915_private *dev_priv,
|
||||
val = I915_READ(reg);
|
||||
cur_pipe = (val & DISPPLANE_SEL_PIPE_MASK) >>
|
||||
DISPPLANE_SEL_PIPE_SHIFT;
|
||||
- WARN((val & DISPLAY_PLANE_ENABLE) && pipe == cur_pipe,
|
||||
+ I915_STATE_WARN((val & DISPLAY_PLANE_ENABLE) && pipe == cur_pipe,
|
||||
"plane %c assertion failure, should be off on pipe %c but is still active\n",
|
||||
plane_name(i), pipe_name(pipe));
|
||||
}
|
||||
@@ -1299,7 +1299,7 @@ static void assert_sprites_disabled(struct drm_i915_private *dev_priv,
|
||||
if (INTEL_INFO(dev)->gen >= 9) {
|
||||
for_each_sprite(pipe, sprite) {
|
||||
val = I915_READ(PLANE_CTL(pipe, sprite));
|
||||
- WARN(val & PLANE_CTL_ENABLE,
|
||||
+ I915_STATE_WARN(val & PLANE_CTL_ENABLE,
|
||||
"plane %d assertion failure, should be off on pipe %c but is still active\n",
|
||||
sprite, pipe_name(pipe));
|
||||
}
|
||||
@@ -1307,20 +1307,20 @@ static void assert_sprites_disabled(struct drm_i915_private *dev_priv,
|
||||
for_each_sprite(pipe, sprite) {
|
||||
reg = SPCNTR(pipe, sprite);
|
||||
val = I915_READ(reg);
|
||||
- WARN(val & SP_ENABLE,
|
||||
+ I915_STATE_WARN(val & SP_ENABLE,
|
||||
"sprite %c assertion failure, should be off on pipe %c but is still active\n",
|
||||
sprite_name(pipe, sprite), pipe_name(pipe));
|
||||
}
|
||||
} else if (INTEL_INFO(dev)->gen >= 7) {
|
||||
reg = SPRCTL(pipe);
|
||||
val = I915_READ(reg);
|
||||
- WARN(val & SPRITE_ENABLE,
|
||||
+ I915_STATE_WARN(val & SPRITE_ENABLE,
|
||||
"sprite %c assertion failure, should be off on pipe %c but is still active\n",
|
||||
plane_name(pipe), pipe_name(pipe));
|
||||
} else if (INTEL_INFO(dev)->gen >= 5) {
|
||||
reg = DVSCNTR(pipe);
|
||||
val = I915_READ(reg);
|
||||
- WARN(val & DVS_ENABLE,
|
||||
+ I915_STATE_WARN(val & DVS_ENABLE,
|
||||
"sprite %c assertion failure, should be off on pipe %c but is still active\n",
|
||||
plane_name(pipe), pipe_name(pipe));
|
||||
}
|
||||
@@ -1328,7 +1328,7 @@ static void assert_sprites_disabled(struct drm_i915_private *dev_priv,
|
||||
|
||||
static void assert_vblank_disabled(struct drm_crtc *crtc)
|
||||
{
|
||||
- if (WARN_ON(drm_crtc_vblank_get(crtc) == 0))
|
||||
+ if (I915_STATE_WARN_ON(drm_crtc_vblank_get(crtc) == 0))
|
||||
drm_crtc_vblank_put(crtc);
|
||||
}
|
||||
|
||||
@@ -1337,12 +1337,12 @@ static void ibx_assert_pch_refclk_enabled(struct drm_i915_private *dev_priv)
|
||||
u32 val;
|
||||
bool enabled;
|
||||
|
||||
- WARN_ON(!(HAS_PCH_IBX(dev_priv->dev) || HAS_PCH_CPT(dev_priv->dev)));
|
||||
+ I915_STATE_WARN_ON(!(HAS_PCH_IBX(dev_priv->dev) || HAS_PCH_CPT(dev_priv->dev)));
|
||||
|
||||
val = I915_READ(PCH_DREF_CONTROL);
|
||||
enabled = !!(val & (DREF_SSC_SOURCE_MASK | DREF_NONSPREAD_SOURCE_MASK |
|
||||
DREF_SUPERSPREAD_SOURCE_MASK));
|
||||
- WARN(!enabled, "PCH refclk assertion failure, should be active but is disabled\n");
|
||||
+ I915_STATE_WARN(!enabled, "PCH refclk assertion failure, should be active but is disabled\n");
|
||||
}
|
||||
|
||||
static void assert_pch_transcoder_disabled(struct drm_i915_private *dev_priv,
|
||||
@@ -1355,7 +1355,7 @@ static void assert_pch_transcoder_disabled(struct drm_i915_private *dev_priv,
|
||||
reg = PCH_TRANSCONF(pipe);
|
||||
val = I915_READ(reg);
|
||||
enabled = !!(val & TRANS_ENABLE);
|
||||
- WARN(enabled,
|
||||
+ I915_STATE_WARN(enabled,
|
||||
"transcoder assertion failed, should be off on pipe %c but is still active\n",
|
||||
pipe_name(pipe));
|
||||
}
|
||||
@@ -1435,11 +1435,11 @@ static void assert_pch_dp_disabled(struct drm_i915_private *dev_priv,
|
||||
enum pipe pipe, int reg, u32 port_sel)
|
||||
{
|
||||
u32 val = I915_READ(reg);
|
||||
- WARN(dp_pipe_enabled(dev_priv, pipe, port_sel, val),
|
||||
+ I915_STATE_WARN(dp_pipe_enabled(dev_priv, pipe, port_sel, val),
|
||||
"PCH DP (0x%08x) enabled on transcoder %c, should be disabled\n",
|
||||
reg, pipe_name(pipe));
|
||||
|
||||
- WARN(HAS_PCH_IBX(dev_priv->dev) && (val & DP_PORT_EN) == 0
|
||||
+ I915_STATE_WARN(HAS_PCH_IBX(dev_priv->dev) && (val & DP_PORT_EN) == 0
|
||||
&& (val & DP_PIPEB_SELECT),
|
||||
"IBX PCH dp port still using transcoder B\n");
|
||||
}
|
||||
@@ -1448,11 +1448,11 @@ static void assert_pch_hdmi_disabled(struct drm_i915_private *dev_priv,
|
||||
enum pipe pipe, int reg)
|
||||
{
|
||||
u32 val = I915_READ(reg);
|
||||
- WARN(hdmi_pipe_enabled(dev_priv, pipe, val),
|
||||
+ I915_STATE_WARN(hdmi_pipe_enabled(dev_priv, pipe, val),
|
||||
"PCH HDMI (0x%08x) enabled on transcoder %c, should be disabled\n",
|
||||
reg, pipe_name(pipe));
|
||||
|
||||
- WARN(HAS_PCH_IBX(dev_priv->dev) && (val & SDVO_ENABLE) == 0
|
||||
+ I915_STATE_WARN(HAS_PCH_IBX(dev_priv->dev) && (val & SDVO_ENABLE) == 0
|
||||
&& (val & SDVO_PIPE_B_SELECT),
|
||||
"IBX PCH hdmi port still using transcoder B\n");
|
||||
}
|
||||
@@ -1469,13 +1469,13 @@ static void assert_pch_ports_disabled(struct drm_i915_private *dev_priv,
|
||||
|
||||
reg = PCH_ADPA;
|
||||
val = I915_READ(reg);
|
||||
- WARN(adpa_pipe_enabled(dev_priv, pipe, val),
|
||||
+ I915_STATE_WARN(adpa_pipe_enabled(dev_priv, pipe, val),
|
||||
"PCH VGA enabled on transcoder %c, should be disabled\n",
|
||||
pipe_name(pipe));
|
||||
|
||||
reg = PCH_LVDS;
|
||||
val = I915_READ(reg);
|
||||
- WARN(lvds_pipe_enabled(dev_priv, pipe, val),
|
||||
+ I915_STATE_WARN(lvds_pipe_enabled(dev_priv, pipe, val),
|
||||
"PCH LVDS enabled on transcoder %c, should be disabled\n",
|
||||
pipe_name(pipe));
|
||||
|
||||
@@ -5388,25 +5388,25 @@ static void intel_connector_check_state(struct intel_connector *connector)
|
||||
if (connector->mst_port)
|
||||
return;
|
||||
|
||||
- WARN(connector->base.dpms == DRM_MODE_DPMS_OFF,
|
||||
+ I915_STATE_WARN(connector->base.dpms == DRM_MODE_DPMS_OFF,
|
||||
"wrong connector dpms state\n");
|
||||
- WARN(connector->base.encoder != &encoder->base,
|
||||
+ I915_STATE_WARN(connector->base.encoder != &encoder->base,
|
||||
"active connector not linked to encoder\n");
|
||||
|
||||
if (encoder) {
|
||||
- WARN(!encoder->connectors_active,
|
||||
+ I915_STATE_WARN(!encoder->connectors_active,
|
||||
"encoder->connectors_active not set\n");
|
||||
|
||||
encoder_enabled = encoder->get_hw_state(encoder, &pipe);
|
||||
- WARN(!encoder_enabled, "encoder not enabled\n");
|
||||
- if (WARN_ON(!encoder->base.crtc))
|
||||
+ I915_STATE_WARN(!encoder_enabled, "encoder not enabled\n");
|
||||
+ if (I915_STATE_WARN_ON(!encoder->base.crtc))
|
||||
return;
|
||||
|
||||
crtc = encoder->base.crtc;
|
||||
|
||||
- WARN(!crtc->enabled, "crtc not enabled\n");
|
||||
- WARN(!to_intel_crtc(crtc)->active, "crtc not active\n");
|
||||
- WARN(pipe != to_intel_crtc(crtc)->pipe,
|
||||
+ I915_STATE_WARN(!crtc->enabled, "crtc not enabled\n");
|
||||
+ I915_STATE_WARN(!to_intel_crtc(crtc)->active, "crtc not active\n");
|
||||
+ I915_STATE_WARN(pipe != to_intel_crtc(crtc)->pipe,
|
||||
"encoder active on the wrong pipe\n");
|
||||
}
|
||||
}
|
||||
@@ -7814,24 +7814,24 @@ static void assert_can_disable_lcpll(struct drm_i915_private *dev_priv)
|
||||
struct intel_crtc *crtc;
|
||||
|
||||
for_each_intel_crtc(dev, crtc)
|
||||
- WARN(crtc->active, "CRTC for pipe %c enabled\n",
|
||||
+ I915_STATE_WARN(crtc->active, "CRTC for pipe %c enabled\n",
|
||||
pipe_name(crtc->pipe));
|
||||
|
||||
- WARN(I915_READ(HSW_PWR_WELL_DRIVER), "Power well on\n");
|
||||
- WARN(I915_READ(SPLL_CTL) & SPLL_PLL_ENABLE, "SPLL enabled\n");
|
||||
- WARN(I915_READ(WRPLL_CTL1) & WRPLL_PLL_ENABLE, "WRPLL1 enabled\n");
|
||||
- WARN(I915_READ(WRPLL_CTL2) & WRPLL_PLL_ENABLE, "WRPLL2 enabled\n");
|
||||
- WARN(I915_READ(PCH_PP_STATUS) & PP_ON, "Panel power on\n");
|
||||
- WARN(I915_READ(BLC_PWM_CPU_CTL2) & BLM_PWM_ENABLE,
|
||||
+ I915_STATE_WARN(I915_READ(HSW_PWR_WELL_DRIVER), "Power well on\n");
|
||||
+ I915_STATE_WARN(I915_READ(SPLL_CTL) & SPLL_PLL_ENABLE, "SPLL enabled\n");
|
||||
+ I915_STATE_WARN(I915_READ(WRPLL_CTL1) & WRPLL_PLL_ENABLE, "WRPLL1 enabled\n");
|
||||
+ I915_STATE_WARN(I915_READ(WRPLL_CTL2) & WRPLL_PLL_ENABLE, "WRPLL2 enabled\n");
|
||||
+ I915_STATE_WARN(I915_READ(PCH_PP_STATUS) & PP_ON, "Panel power on\n");
|
||||
+ I915_STATE_WARN(I915_READ(BLC_PWM_CPU_CTL2) & BLM_PWM_ENABLE,
|
||||
"CPU PWM1 enabled\n");
|
||||
if (IS_HASWELL(dev))
|
||||
- WARN(I915_READ(HSW_BLC_PWM2_CTL) & BLM_PWM_ENABLE,
|
||||
+ I915_STATE_WARN(I915_READ(HSW_BLC_PWM2_CTL) & BLM_PWM_ENABLE,
|
||||
"CPU PWM2 enabled\n");
|
||||
- WARN(I915_READ(BLC_PWM_PCH_CTL1) & BLM_PCH_PWM_ENABLE,
|
||||
+ I915_STATE_WARN(I915_READ(BLC_PWM_PCH_CTL1) & BLM_PCH_PWM_ENABLE,
|
||||
"PCH PWM1 enabled\n");
|
||||
- WARN(I915_READ(UTIL_PIN_CTL) & UTIL_PIN_ENABLE,
|
||||
+ I915_STATE_WARN(I915_READ(UTIL_PIN_CTL) & UTIL_PIN_ENABLE,
|
||||
"Utility pin enabled\n");
|
||||
- WARN(I915_READ(PCH_GTC_CTL) & PCH_GTC_ENABLE, "PCH GTC enabled\n");
|
||||
+ I915_STATE_WARN(I915_READ(PCH_GTC_CTL) & PCH_GTC_ENABLE, "PCH GTC enabled\n");
|
||||
|
||||
/*
|
||||
* In theory we can still leave IRQs enabled, as long as only the HPD
|
||||
@@ -7839,7 +7839,7 @@ static void assert_can_disable_lcpll(struct drm_i915_private *dev_priv)
|
||||
* gen-specific and since we only disable LCPLL after we fully disable
|
||||
* the interrupts, the check below should be enough.
|
||||
*/
|
||||
- WARN(intel_irqs_enabled(dev_priv), "IRQs enabled\n");
|
||||
+ I915_STATE_WARN(intel_irqs_enabled(dev_priv), "IRQs enabled\n");
|
||||
}
|
||||
|
||||
static uint32_t hsw_read_dcomp(struct drm_i915_private *dev_priv)
|
||||
@@ -10746,7 +10746,7 @@ check_connector_state(struct drm_device *dev)
|
||||
* ->get_hw_state callbacks. */
|
||||
intel_connector_check_state(connector);
|
||||
|
||||
- WARN(&connector->new_encoder->base != connector->base.encoder,
|
||||
+ I915_STATE_WARN(&connector->new_encoder->base != connector->base.encoder,
|
||||
"connector's staged encoder doesn't match current encoder\n");
|
||||
}
|
||||
}
|
||||
@@ -10766,9 +10766,9 @@ check_encoder_state(struct drm_device *dev)
|
||||
encoder->base.base.id,
|
||||
encoder->base.name);
|
||||
|
||||
- WARN(&encoder->new_crtc->base != encoder->base.crtc,
|
||||
+ I915_STATE_WARN(&encoder->new_crtc->base != encoder->base.crtc,
|
||||
"encoder's stage crtc doesn't match current crtc\n");
|
||||
- WARN(encoder->connectors_active && !encoder->base.crtc,
|
||||
+ I915_STATE_WARN(encoder->connectors_active && !encoder->base.crtc,
|
||||
"encoder's active_connectors set, but no crtc\n");
|
||||
|
||||
list_for_each_entry(connector, &dev->mode_config.connector_list,
|
||||
@@ -10787,19 +10787,19 @@ check_encoder_state(struct drm_device *dev)
|
||||
if (!enabled && encoder->base.encoder_type == DRM_MODE_ENCODER_DPMST)
|
||||
continue;
|
||||
|
||||
- WARN(!!encoder->base.crtc != enabled,
|
||||
+ I915_STATE_WARN(!!encoder->base.crtc != enabled,
|
||||
"encoder's enabled state mismatch "
|
||||
"(expected %i, found %i)\n",
|
||||
!!encoder->base.crtc, enabled);
|
||||
- WARN(active && !encoder->base.crtc,
|
||||
+ I915_STATE_WARN(active && !encoder->base.crtc,
|
||||
"active encoder with no crtc\n");
|
||||
|
||||
- WARN(encoder->connectors_active != active,
|
||||
+ I915_STATE_WARN(encoder->connectors_active != active,
|
||||
"encoder's computed active state doesn't match tracked active state "
|
||||
"(expected %i, found %i)\n", active, encoder->connectors_active);
|
||||
|
||||
active = encoder->get_hw_state(encoder, &pipe);
|
||||
- WARN(active != encoder->connectors_active,
|
||||
+ I915_STATE_WARN(active != encoder->connectors_active,
|
||||
"encoder's hw state doesn't match sw tracking "
|
||||
"(expected %i, found %i)\n",
|
||||
encoder->connectors_active, active);
|
||||
@@ -10808,7 +10808,7 @@ check_encoder_state(struct drm_device *dev)
|
||||
continue;
|
||||
|
||||
tracked_pipe = to_intel_crtc(encoder->base.crtc)->pipe;
|
||||
- WARN(active && pipe != tracked_pipe,
|
||||
+ I915_STATE_WARN(active && pipe != tracked_pipe,
|
||||
"active encoder's pipe doesn't match"
|
||||
"(expected %i, found %i)\n",
|
||||
tracked_pipe, pipe);
|
||||
@@ -10833,7 +10833,7 @@ check_crtc_state(struct drm_device *dev)
|
||||
DRM_DEBUG_KMS("[CRTC:%d]\n",
|
||||
crtc->base.base.id);
|
||||
|
||||
- WARN(crtc->active && !crtc->base.enabled,
|
||||
+ I915_STATE_WARN(crtc->active && !crtc->base.enabled,
|
||||
"active crtc, but not enabled in sw tracking\n");
|
||||
|
||||
for_each_intel_encoder(dev, encoder) {
|
||||
@@ -10844,10 +10844,10 @@ check_crtc_state(struct drm_device *dev)
|
||||
active = true;
|
||||
}
|
||||
|
||||
- WARN(active != crtc->active,
|
||||
+ I915_STATE_WARN(active != crtc->active,
|
||||
"crtc's computed active state doesn't match tracked active state "
|
||||
"(expected %i, found %i)\n", active, crtc->active);
|
||||
- WARN(enabled != crtc->base.enabled,
|
||||
+ I915_STATE_WARN(enabled != crtc->base.enabled,
|
||||
"crtc's computed enabled state doesn't match tracked enabled state "
|
||||
"(expected %i, found %i)\n", enabled, crtc->base.enabled);
|
||||
|
||||
@@ -10867,13 +10867,13 @@ check_crtc_state(struct drm_device *dev)
|
||||
encoder->get_config(encoder, &pipe_config);
|
||||
}
|
||||
|
||||
- WARN(crtc->active != active,
|
||||
+ I915_STATE_WARN(crtc->active != active,
|
||||
"crtc active state doesn't match with hw state "
|
||||
"(expected %i, found %i)\n", crtc->active, active);
|
||||
|
||||
if (active &&
|
||||
!intel_pipe_config_compare(dev, &crtc->config, &pipe_config)) {
|
||||
- WARN(1, "pipe state doesn't match!\n");
|
||||
+ I915_STATE_WARN(1, "pipe state doesn't match!\n");
|
||||
intel_dump_pipe_config(crtc, &pipe_config,
|
||||
"[hw state]");
|
||||
intel_dump_pipe_config(crtc, &crtc->config,
|
||||
@@ -10901,14 +10901,14 @@ check_shared_dpll_state(struct drm_device *dev)
|
||||
|
||||
active = pll->get_hw_state(dev_priv, pll, &dpll_hw_state);
|
||||
|
||||
- WARN(pll->active > hweight32(pll->config.crtc_mask),
|
||||
+ I915_STATE_WARN(pll->active > hweight32(pll->config.crtc_mask),
|
||||
"more active pll users than references: %i vs %i\n",
|
||||
pll->active, hweight32(pll->config.crtc_mask));
|
||||
- WARN(pll->active && !pll->on,
|
||||
+ I915_STATE_WARN(pll->active && !pll->on,
|
||||
"pll in active use but not on in sw tracking\n");
|
||||
- WARN(pll->on && !pll->active,
|
||||
+ I915_STATE_WARN(pll->on && !pll->active,
|
||||
"pll in on but not on in use in sw tracking\n");
|
||||
- WARN(pll->on != active,
|
||||
+ I915_STATE_WARN(pll->on != active,
|
||||
"pll on state mismatch (expected %i, found %i)\n",
|
||||
pll->on, active);
|
||||
|
||||
@@ -10918,14 +10918,14 @@ check_shared_dpll_state(struct drm_device *dev)
|
||||
if (crtc->active && intel_crtc_to_shared_dpll(crtc) == pll)
|
||||
active_crtcs++;
|
||||
}
|
||||
- WARN(pll->active != active_crtcs,
|
||||
+ I915_STATE_WARN(pll->active != active_crtcs,
|
||||
"pll active crtcs mismatch (expected %i, found %i)\n",
|
||||
pll->active, active_crtcs);
|
||||
- WARN(hweight32(pll->config.crtc_mask) != enabled_crtcs,
|
||||
+ I915_STATE_WARN(hweight32(pll->config.crtc_mask) != enabled_crtcs,
|
||||
"pll enabled crtcs mismatch (expected %i, found %i)\n",
|
||||
hweight32(pll->config.crtc_mask), enabled_crtcs);
|
||||
|
||||
- WARN(pll->on && memcmp(&pll->config.hw_state, &dpll_hw_state,
|
||||
+ I915_STATE_WARN(pll->on && memcmp(&pll->config.hw_state, &dpll_hw_state,
|
||||
sizeof(dpll_hw_state)),
|
||||
"pll hw state mismatch\n");
|
||||
}
|
||||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
|
||||
index 9f6c8971855c..67adf6437f78 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp.c
|
||||
@@ -1558,7 +1558,7 @@ void intel_edp_panel_vdd_on(struct intel_dp *intel_dp)
|
||||
vdd = edp_panel_vdd_on(intel_dp);
|
||||
pps_unlock(intel_dp);
|
||||
|
||||
- WARN(!vdd, "eDP port %c VDD already requested on\n",
|
||||
+ I915_STATE_WARN(!vdd, "eDP port %c VDD already requested on\n",
|
||||
port_name(dp_to_dig_port(intel_dp)->port));
|
||||
}
|
||||
|
||||
@@ -1642,7 +1642,7 @@ static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
|
||||
if (!is_edp(intel_dp))
|
||||
return;
|
||||
|
||||
- WARN(!intel_dp->want_panel_vdd, "eDP port %c VDD not forced on",
|
||||
+ I915_STATE_WARN(!intel_dp->want_panel_vdd, "eDP port %c VDD not forced on",
|
||||
port_name(dp_to_dig_port(intel_dp)->port));
|
||||
|
||||
intel_dp->want_panel_vdd = false;
|
|
@ -0,0 +1,780 @@
|
|||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Tue, 18 Nov 2014 10:18:22 -0500
|
||||
Subject: [PATCH] efi: Add esrt support.
|
||||
|
||||
Add sysfs files for the EFI System Resource Table (ESRT) under
|
||||
/sys/firmware/efi/esrt and for each EFI System Resource Entry under
|
||||
entries/ as a subdir.
|
||||
|
||||
The EFI System Resource Table (ESRT) provides a read-only catalog of
|
||||
system components for which the system accepts firmware upgrades via
|
||||
UEFI's "Capsule Update" feature. This module allows userland utilities
|
||||
to evaluate what firmware updates can be applied to this system, and
|
||||
potentially arrange for those updates to occur.
|
||||
|
||||
The ESRT is described as part of the UEFI specification, in version 2.5
|
||||
which should be available from http://uefi.org/specifications in early
|
||||
2015. If you're a member of the UEFI Forum, information about its
|
||||
addition to the standard is available as UEFI Mantis 1090.
|
||||
|
||||
For some hardware platforms, additional restrictions may be found at
|
||||
http://msdn.microsoft.com/en-us/library/windows/hardware/jj128256.aspx ,
|
||||
and additional documentation may be found at
|
||||
http://download.microsoft.com/download/5/F/5/5F5D16CD-2530-4289-8019-94C6A20BED3C/windows-uefi-firmware-update-platform.docx
|
||||
.
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
Documentation/ABI/testing/sysfs-firmware-efi-esrt | 81 ++++
|
||||
arch/x86/platform/efi/efi.c | 2 +
|
||||
drivers/firmware/efi/Makefile | 2 +-
|
||||
drivers/firmware/efi/efi.c | 82 +++-
|
||||
drivers/firmware/efi/esrt.c | 464 ++++++++++++++++++++++
|
||||
include/linux/efi.h | 8 +
|
||||
6 files changed, 637 insertions(+), 2 deletions(-)
|
||||
create mode 100644 Documentation/ABI/testing/sysfs-firmware-efi-esrt
|
||||
create mode 100644 drivers/firmware/efi/esrt.c
|
||||
|
||||
diff --git a/Documentation/ABI/testing/sysfs-firmware-efi-esrt b/Documentation/ABI/testing/sysfs-firmware-efi-esrt
|
||||
new file mode 100644
|
||||
index 000000000000..6e431d1a4e79
|
||||
--- /dev/null
|
||||
+++ b/Documentation/ABI/testing/sysfs-firmware-efi-esrt
|
||||
@@ -0,0 +1,81 @@
|
||||
+What: /sys/firmware/efi/esrt/
|
||||
+Date: February 2015
|
||||
+Contact: Peter Jones <pjones@redhat.com>
|
||||
+Description: Provides userland access to read the EFI System Resource Table
|
||||
+ (ESRT), a catalog of firmware for which can be updated with
|
||||
+ the UEFI UpdateCapsule mechanism described in section 7.5 of
|
||||
+ the UEFI Standard.
|
||||
+Users: fwupdate - https://github.com/rhinstaller/fwupdate
|
||||
+
|
||||
+What: /sys/firmware/efi/esrt/fw_resource_count
|
||||
+Date: February 2015
|
||||
+Contact: Peter Jones <pjones@redhat.com>
|
||||
+Description: The number of entries in the ESRT
|
||||
+
|
||||
+What: /sys/firmware/efi/esrt/fw_resource_count_max
|
||||
+Date: February 2015
|
||||
+Contact: Peter Jones <pjones@redhat.com>
|
||||
+Description: The maximum number of entries that /could/ be registered
|
||||
+ in the allocation the table is currently in. This is
|
||||
+ really only useful to the system firmware itself.
|
||||
+
|
||||
+What: /sys/firmware/efi/esrt/fw_resource_version
|
||||
+Date: February 2015
|
||||
+Contact: Peter Jones <pjones@redhat.com>
|
||||
+Description: The version of the ESRT structure provided by the firmware.
|
||||
+
|
||||
+What: /sys/firmware/efi/esrt/entries/entry$N/
|
||||
+Date: February 2015
|
||||
+Contact: Peter Jones <pjones@redhat.com>
|
||||
+Description: Each ESRT entry is identified by a GUID, and each gets a
|
||||
+ subdirectory under entries/ .
|
||||
+ example: /sys/firmware/efi/esrt/entries/entry0/
|
||||
+
|
||||
+What: /sys/firmware/efi/esrt/entries/entry$N/fw_type
|
||||
+Date: February 2015
|
||||
+Contact: Peter Jones <pjones@redhat.com>
|
||||
+Description: What kind of firmware entry this is:
|
||||
+ 0 - Unknown
|
||||
+ 1 - System Firmware
|
||||
+ 2 - Device Firmware
|
||||
+ 3 - UEFI Driver
|
||||
+
|
||||
+What: /sys/firmware/efi/esrt/entries/entry$N/fw_class
|
||||
+Date: February 2015
|
||||
+Contact: Peter Jones <pjones@redhat.com>
|
||||
+Description: This is the entry's guid, and will match the directory name.
|
||||
+
|
||||
+What: /sys/firmware/efi/esrt/entries/entry$N/fw_version
|
||||
+Date: February 2015
|
||||
+Contact: Peter Jones <pjones@redhat.com>
|
||||
+Description: The version of the firmware currently installed. This is a
|
||||
+ 32-bit unsigned integer.
|
||||
+
|
||||
+What: /sys/firmware/efi/esrt/entries/entry$N/lowest_supported_fw_version
|
||||
+Date: February 2015
|
||||
+Contact: Peter Jones <pjones@redhat.com>
|
||||
+Description: The lowest version of the firmware that can be installed.
|
||||
+
|
||||
+What: /sys/firmware/efi/esrt/entries/entry$N/capsule_flags
|
||||
+Date: February 2015
|
||||
+Contact: Peter Jones <pjones@redhat.com>
|
||||
+Description: Flags that must be passed to UpdateCapsule()
|
||||
+
|
||||
+What: /sys/firmware/efi/esrt/entries/entry$N/last_attempt_version
|
||||
+Date: February 2015
|
||||
+Contact: Peter Jones <pjones@redhat.com>
|
||||
+Description: The last firmware version for which an update was attempted.
|
||||
+
|
||||
+What: /sys/firmware/efi/esrt/entries/entry$N/last_attempt_status
|
||||
+Date: February 2015
|
||||
+Contact: Peter Jones <pjones@redhat.com>
|
||||
+Description: The result of the last firmware update attempt for the
|
||||
+ firmware resource entry.
|
||||
+ 0 - Success
|
||||
+ 1 - Insufficient resources
|
||||
+ 2 - Incorrect version
|
||||
+ 3 - Invalid format
|
||||
+ 4 - Authentication error
|
||||
+ 5 - AC power event
|
||||
+ 6 - Battery power event
|
||||
+
|
||||
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
|
||||
index dbc8627a5cdf..b4c9fbbc9270 100644
|
||||
--- a/arch/x86/platform/efi/efi.c
|
||||
+++ b/arch/x86/platform/efi/efi.c
|
||||
@@ -492,6 +492,8 @@ void __init efi_init(void)
|
||||
return;
|
||||
|
||||
print_efi_memmap();
|
||||
+
|
||||
+ efi_esrt_init();
|
||||
}
|
||||
|
||||
void __init efi_late_init(void)
|
||||
diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile
|
||||
index d8be608a9f3b..26eabbc55341 100644
|
||||
--- a/drivers/firmware/efi/Makefile
|
||||
+++ b/drivers/firmware/efi/Makefile
|
||||
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# Makefile for linux kernel
|
||||
#
|
||||
-obj-$(CONFIG_EFI) += efi.o vars.o reboot.o
|
||||
+obj-$(CONFIG_EFI) += efi.o esrt.o vars.o reboot.o
|
||||
obj-$(CONFIG_EFI_VARS) += efivars.o
|
||||
obj-$(CONFIG_EFI_VARS_PSTORE) += efi-pstore.o
|
||||
obj-$(CONFIG_UEFI_CPER) += cper.o
|
||||
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
|
||||
index 3061bb8629dc..48b4c356740f 100644
|
||||
--- a/drivers/firmware/efi/efi.c
|
||||
+++ b/drivers/firmware/efi/efi.c
|
||||
@@ -39,6 +39,7 @@ struct efi __read_mostly efi = {
|
||||
.fw_vendor = EFI_INVALID_TABLE_ADDR,
|
||||
.runtime = EFI_INVALID_TABLE_ADDR,
|
||||
.config_table = EFI_INVALID_TABLE_ADDR,
|
||||
+ .esrt = EFI_INVALID_TABLE_ADDR,
|
||||
};
|
||||
EXPORT_SYMBOL(efi);
|
||||
|
||||
@@ -64,7 +65,7 @@ static int __init parse_efi_cmdline(char *str)
|
||||
}
|
||||
early_param("efi", parse_efi_cmdline);
|
||||
|
||||
-static struct kobject *efi_kobj;
|
||||
+struct kobject *efi_kobj;
|
||||
static struct kobject *efivars_kobj;
|
||||
|
||||
/*
|
||||
@@ -232,6 +233,84 @@ err_put:
|
||||
|
||||
subsys_initcall(efisubsys_init);
|
||||
|
||||
+/*
|
||||
+ * Find the efi memory descriptor for a given physical address. Given a
|
||||
+ * physicall address, determine if it exists within an EFI Memory Map entry,
|
||||
+ * and if so, populate the supplied memory descriptor with the appropriate
|
||||
+ * data.
|
||||
+ */
|
||||
+int __init efi_mem_desc_lookup(u64 phys_addr, efi_memory_desc_t *out_md)
|
||||
+{
|
||||
+ struct efi_memory_map *map = efi.memmap;
|
||||
+ void *p, *e;
|
||||
+
|
||||
+ if (!efi_enabled(EFI_MEMMAP)) {
|
||||
+ pr_err_once("EFI_MEMMAP is not enabled.\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ if (!map) {
|
||||
+ pr_err_once("efi.memmap is not set.\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+ if (!out_md) {
|
||||
+ pr_err_once("out_md is null.\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+ if (WARN_ON_ONCE(!map->phys_map))
|
||||
+ return -EINVAL;
|
||||
+ if (WARN_ON_ONCE(map->nr_map == 0) || WARN_ON_ONCE(map->desc_size == 0))
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ e = map->phys_map + map->nr_map * map->desc_size;
|
||||
+ for (p = map->phys_map; p < e; p += map->desc_size) {
|
||||
+ efi_memory_desc_t *md;
|
||||
+ u64 size;
|
||||
+ u64 end;
|
||||
+
|
||||
+ /*
|
||||
+ * If a driver calls this after efi_free_boot_services,
|
||||
+ * ->map will be NULL, and the target may also not be mapped.
|
||||
+ * So just always get our own virtual map on the CPU.
|
||||
+ *
|
||||
+ */
|
||||
+ md = early_memremap((phys_addr_t)p, sizeof (*md));
|
||||
+ if (!md) {
|
||||
+ pr_err_once("early_memremap(%p, %zu) failed.\n",
|
||||
+ p, sizeof (*md));
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ if (!(md->attribute & EFI_MEMORY_RUNTIME) &&
|
||||
+ md->type != EFI_BOOT_SERVICES_DATA &&
|
||||
+ md->type != EFI_RUNTIME_SERVICES_DATA) {
|
||||
+ early_memunmap(md, sizeof (*md));
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ size = md->num_pages << EFI_PAGE_SHIFT;
|
||||
+ end = md->phys_addr + size;
|
||||
+ if (phys_addr >= md->phys_addr && phys_addr < end) {
|
||||
+ memcpy(out_md, md, sizeof(*out_md));
|
||||
+ early_memunmap(md, sizeof (*md));
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ early_memunmap(md, sizeof (*md));
|
||||
+ }
|
||||
+ pr_err_once("requested map not found.\n");
|
||||
+ return -ENOENT;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Calculate the highest address of an efi memory descriptor.
|
||||
+ */
|
||||
+u64 __init efi_mem_desc_end(efi_memory_desc_t *md)
|
||||
+{
|
||||
+ u64 size = md->num_pages << EFI_PAGE_SHIFT;
|
||||
+ u64 end = md->phys_addr + size;
|
||||
+ return end;
|
||||
+}
|
||||
|
||||
/*
|
||||
* We can't ioremap data in EFI boot services RAM, because we've already mapped
|
||||
@@ -274,6 +353,7 @@ static __initdata efi_config_table_type_t common_tables[] = {
|
||||
{SMBIOS_TABLE_GUID, "SMBIOS", &efi.smbios},
|
||||
{SMBIOS3_TABLE_GUID, "SMBIOS 3.0", &efi.smbios3},
|
||||
{UGA_IO_PROTOCOL_GUID, "UGA", &efi.uga},
|
||||
+ {EFI_SYSTEM_RESOURCE_TABLE_GUID, "ESRT", &efi.esrt},
|
||||
{NULL_GUID, NULL, NULL},
|
||||
};
|
||||
|
||||
diff --git a/drivers/firmware/efi/esrt.c b/drivers/firmware/efi/esrt.c
|
||||
new file mode 100644
|
||||
index 000000000000..20c0cbdb1c60
|
||||
--- /dev/null
|
||||
+++ b/drivers/firmware/efi/esrt.c
|
||||
@@ -0,0 +1,464 @@
|
||||
+/*
|
||||
+ * esrt.c
|
||||
+ *
|
||||
+ * This module exports EFI System Resource Table (ESRT) entries into userspace
|
||||
+ * through the sysfs file system. The ESRT provides a read-only catalog of
|
||||
+ * system components for which the system accepts firmware upgrades via UEFI's
|
||||
+ * "Capsule Update" feature. This module allows userland utilities to evaluate
|
||||
+ * what firmware updates can be applied to this system, and potentially arrange
|
||||
+ * for those updates to occur.
|
||||
+ *
|
||||
+ * Data is currently found below /sys/firmware/efi/esrt/...
|
||||
+ */
|
||||
+#define pr_fmt(fmt) "esrt: " fmt
|
||||
+
|
||||
+#include <linux/capability.h>
|
||||
+#include <linux/device.h>
|
||||
+#include <linux/efi.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/kobject.h>
|
||||
+#include <linux/list.h>
|
||||
+#include <linux/memblock.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/types.h>
|
||||
+
|
||||
+#include <asm/io.h>
|
||||
+#include <asm/early_ioremap.h>
|
||||
+
|
||||
+struct efi_system_resource_entry_v1 {
|
||||
+ efi_guid_t fw_class;
|
||||
+ u32 fw_type;
|
||||
+ u32 fw_version;
|
||||
+ u32 lowest_supported_fw_version;
|
||||
+ u32 capsule_flags;
|
||||
+ u32 last_attempt_version;
|
||||
+ u32 last_attempt_status;
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * _count and _version are what they seem like. _max is actually just
|
||||
+ * accounting info for the firmware when creating the table; it should never
|
||||
+ * have been exposed to us. To wit, the spec says:
|
||||
+ * The maximum number of resource array entries that can be within the
|
||||
+ * table without reallocating the table, must not be zero.
|
||||
+ * Since there's no guidance about what that means in terms of memory layout,
|
||||
+ * it means nothing to us.
|
||||
+ */
|
||||
+struct efi_system_resource_table {
|
||||
+ u32 fw_resource_count;
|
||||
+ u32 fw_resource_count_max;
|
||||
+ u64 fw_resource_version;
|
||||
+ u8 entries[];
|
||||
+};
|
||||
+
|
||||
+static phys_addr_t esrt_data;
|
||||
+static size_t esrt_data_size;
|
||||
+
|
||||
+static struct efi_system_resource_table *esrt;
|
||||
+
|
||||
+struct esre_entry {
|
||||
+ union {
|
||||
+ struct efi_system_resource_entry_v1 *esre1;
|
||||
+ } esre;
|
||||
+
|
||||
+ struct kobject kobj;
|
||||
+ struct list_head list;
|
||||
+};
|
||||
+
|
||||
+/* global list of esre_entry. */
|
||||
+static LIST_HEAD(entry_list);
|
||||
+
|
||||
+/* entry attribute */
|
||||
+struct esre_attribute {
|
||||
+ struct attribute attr;
|
||||
+ ssize_t (*show)(struct esre_entry *entry, char *buf);
|
||||
+ ssize_t (*store)(struct esre_entry *entry,
|
||||
+ const char *buf, size_t count);
|
||||
+};
|
||||
+
|
||||
+static struct esre_entry *to_entry(struct kobject *kobj)
|
||||
+{
|
||||
+ return container_of(kobj, struct esre_entry, kobj);
|
||||
+}
|
||||
+
|
||||
+static struct esre_attribute *to_attr(struct attribute *attr)
|
||||
+{
|
||||
+ return container_of(attr, struct esre_attribute, attr);
|
||||
+}
|
||||
+
|
||||
+static ssize_t esre_attr_show(struct kobject *kobj,
|
||||
+ struct attribute *_attr, char *buf)
|
||||
+{
|
||||
+ struct esre_entry *entry = to_entry(kobj);
|
||||
+ struct esre_attribute *attr = to_attr(_attr);
|
||||
+
|
||||
+ /* Don't tell normal users what firmware versions we've got... */
|
||||
+ if (!capable(CAP_SYS_ADMIN))
|
||||
+ return -EACCES;
|
||||
+
|
||||
+ return attr->show(entry, buf);
|
||||
+}
|
||||
+
|
||||
+static const struct sysfs_ops esre_attr_ops = {
|
||||
+ .show = esre_attr_show,
|
||||
+};
|
||||
+
|
||||
+/* Generic ESRT Entry ("ESRE") support. */
|
||||
+static ssize_t esre_fw_class_show(struct esre_entry *entry, char *buf)
|
||||
+{
|
||||
+ char *str = buf;
|
||||
+
|
||||
+ efi_guid_to_str(&entry->esre.esre1->fw_class, str);
|
||||
+ str += strlen(str);
|
||||
+ str += sprintf(str, "\n");
|
||||
+
|
||||
+ return str - buf;
|
||||
+}
|
||||
+
|
||||
+static struct esre_attribute esre_fw_class = __ATTR(fw_class, 0400,
|
||||
+ esre_fw_class_show, NULL);
|
||||
+
|
||||
+#define esre_attr_decl(name, size, fmt) \
|
||||
+static ssize_t esre_##name##_show(struct esre_entry *entry, char *buf) \
|
||||
+{ \
|
||||
+ return sprintf(buf, fmt "\n", \
|
||||
+ le##size##_to_cpu(entry->esre.esre1->name)); \
|
||||
+} \
|
||||
+\
|
||||
+static struct esre_attribute esre_##name = __ATTR(name, 0400, \
|
||||
+ esre_##name##_show, NULL)
|
||||
+
|
||||
+esre_attr_decl(fw_type, 32, "%u");
|
||||
+esre_attr_decl(fw_version, 32, "%u");
|
||||
+esre_attr_decl(lowest_supported_fw_version, 32, "%u");
|
||||
+esre_attr_decl(capsule_flags, 32, "0x%x");
|
||||
+esre_attr_decl(last_attempt_version, 32, "%u");
|
||||
+esre_attr_decl(last_attempt_status, 32, "%u");
|
||||
+
|
||||
+static struct attribute *esre1_attrs[] = {
|
||||
+ &esre_fw_class.attr,
|
||||
+ &esre_fw_type.attr,
|
||||
+ &esre_fw_version.attr,
|
||||
+ &esre_lowest_supported_fw_version.attr,
|
||||
+ &esre_capsule_flags.attr,
|
||||
+ &esre_last_attempt_version.attr,
|
||||
+ &esre_last_attempt_status.attr,
|
||||
+ NULL
|
||||
+};
|
||||
+static void esre_release(struct kobject *kobj)
|
||||
+{
|
||||
+ struct esre_entry *entry = to_entry(kobj);
|
||||
+
|
||||
+ list_del(&entry->list);
|
||||
+ kfree(entry);
|
||||
+}
|
||||
+
|
||||
+static struct kobj_type esre1_ktype = {
|
||||
+ .release = esre_release,
|
||||
+ .sysfs_ops = &esre_attr_ops,
|
||||
+ .default_attrs = esre1_attrs,
|
||||
+};
|
||||
+
|
||||
+
|
||||
+static struct kobject *esrt_kobj;
|
||||
+static struct kset *esrt_kset;
|
||||
+
|
||||
+static int esre_create_sysfs_entry(void *esre, int entry_num)
|
||||
+{
|
||||
+ int rc = 0;
|
||||
+ struct esre_entry *entry;
|
||||
+ char name[20];
|
||||
+
|
||||
+ entry = kzalloc(sizeof(*entry), GFP_KERNEL);
|
||||
+ if (!entry)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ sprintf(name, "entry%d", entry_num);
|
||||
+
|
||||
+ entry->kobj.kset = esrt_kset;
|
||||
+
|
||||
+ if (esrt->fw_resource_version == 1) {
|
||||
+ entry->esre.esre1 = esre;
|
||||
+ rc = kobject_init_and_add(&entry->kobj, &esre1_ktype, NULL,
|
||||
+ "%s", name);
|
||||
+ }
|
||||
+ if (rc) {
|
||||
+ kfree(entry);
|
||||
+ return rc;
|
||||
+ }
|
||||
+
|
||||
+ list_add_tail(&entry->list, &entry_list);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* support for displaying ESRT fields at the top level */
|
||||
+#define esrt_attr_decl(name, size, fmt) \
|
||||
+static ssize_t esrt_##name##_show(struct kobject *kobj, \
|
||||
+ struct kobj_attribute *attr, char *buf)\
|
||||
+{ \
|
||||
+ return sprintf(buf, fmt "\n", le##size##_to_cpu(esrt->name)); \
|
||||
+} \
|
||||
+\
|
||||
+static struct kobj_attribute esrt_##name = __ATTR(name, 0400, \
|
||||
+ esrt_##name##_show, NULL)
|
||||
+
|
||||
+esrt_attr_decl(fw_resource_count, 32, "%u");
|
||||
+esrt_attr_decl(fw_resource_count_max, 32, "%u");
|
||||
+esrt_attr_decl(fw_resource_version, 64, "%llu");
|
||||
+
|
||||
+static struct attribute *esrt_attrs[] = {
|
||||
+ &esrt_fw_resource_count.attr,
|
||||
+ &esrt_fw_resource_count_max.attr,
|
||||
+ &esrt_fw_resource_version.attr,
|
||||
+ NULL,
|
||||
+};
|
||||
+
|
||||
+static inline int esrt_table_exists(void)
|
||||
+{
|
||||
+ if (!efi_enabled(EFI_CONFIG_TABLES))
|
||||
+ return 0;
|
||||
+ if (efi.esrt == EFI_INVALID_TABLE_ADDR)
|
||||
+ return 0;
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+static umode_t esrt_attr_is_visible(struct kobject *kobj,
|
||||
+ struct attribute *attr, int n)
|
||||
+{
|
||||
+ if (!esrt_table_exists())
|
||||
+ return 0;
|
||||
+ return attr->mode;
|
||||
+}
|
||||
+
|
||||
+static struct attribute_group esrt_attr_group = {
|
||||
+ .attrs = esrt_attrs,
|
||||
+ .is_visible = esrt_attr_is_visible,
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * remap the table, copy it to kmalloced pages, and unmap it.
|
||||
+ */
|
||||
+void __init efi_esrt_init(void)
|
||||
+{
|
||||
+ void *va;
|
||||
+ struct efi_system_resource_table tmpesrt;
|
||||
+ struct efi_system_resource_entry_v1 *v1_entries;
|
||||
+ size_t size, max, entry_size, entries_size;
|
||||
+ efi_memory_desc_t md;
|
||||
+ int rc;
|
||||
+
|
||||
+ pr_debug("esrt-init: loading.\n");
|
||||
+ if (!esrt_table_exists())
|
||||
+ return;
|
||||
+
|
||||
+ rc = efi_mem_desc_lookup(efi.esrt, &md);
|
||||
+ if (rc < 0) {
|
||||
+ pr_err("ESRT header is not in the memory map.\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ max = efi_mem_desc_end(&md);
|
||||
+ if (max < efi.esrt) {
|
||||
+ pr_err("EFI memory descriptor is invalid. (esrt: %p max: %p)\n",
|
||||
+ (void *)efi.esrt, (void *)max);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ size = sizeof(*esrt);
|
||||
+ max -= efi.esrt;
|
||||
+
|
||||
+ if (max < size) {
|
||||
+ pr_err("ESRT header doen't fit on single memory map entry. (size: %zu max: %zu)\n",
|
||||
+ size, max);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ va = early_memremap(efi.esrt, size);
|
||||
+ if (!va) {
|
||||
+ pr_err("early_memremap(%p, %zu) failed.\n", (void *)efi.esrt,
|
||||
+ size);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ memcpy(&tmpesrt, va, sizeof(tmpesrt));
|
||||
+
|
||||
+ if (tmpesrt.fw_resource_version == 1) {
|
||||
+ entry_size = sizeof (*v1_entries);
|
||||
+ } else {
|
||||
+ pr_err("Unsupported ESRT version %lld.\n",
|
||||
+ tmpesrt.fw_resource_version);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (tmpesrt.fw_resource_count > 0 && max - size < entry_size) {
|
||||
+ pr_err("ESRT memory map entry can only hold the header. (max: %zu size: %zu)\n",
|
||||
+ max - size, entry_size);
|
||||
+ goto err_memunmap;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * The format doesn't really give us any boundary to test here,
|
||||
+ * so I'm making up 128 as the max number of individually updatable
|
||||
+ * components we support.
|
||||
+ * 128 should be pretty excessive, but there's still some chance
|
||||
+ * somebody will do that someday and we'll need to raise this.
|
||||
+ */
|
||||
+ if (tmpesrt.fw_resource_count > 128) {
|
||||
+ pr_err("ESRT says fw_resource_count has very large value %d.\n",
|
||||
+ tmpesrt.fw_resource_count);
|
||||
+ goto err_memunmap;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * We know it can't be larger than N * sizeof() here, and N is limited
|
||||
+ * by the previous test to a small number, so there's no overflow.
|
||||
+ */
|
||||
+ entries_size = tmpesrt.fw_resource_count * entry_size;
|
||||
+ if (max < size + entries_size) {
|
||||
+ pr_err("ESRT does not fit on single memory map entry (size: %zu max: %zu)\n",
|
||||
+ size, max);
|
||||
+ goto err_memunmap;
|
||||
+ }
|
||||
+
|
||||
+ /* remap it with our (plausible) new pages */
|
||||
+ early_memunmap(va, size);
|
||||
+ size += entries_size;
|
||||
+ va = early_memremap(efi.esrt, size);
|
||||
+ if (!va) {
|
||||
+ pr_err("early_memremap(%p, %zu) failed.\n", (void *)efi.esrt,
|
||||
+ size);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ esrt_data = (phys_addr_t)efi.esrt;
|
||||
+ esrt_data_size = size;
|
||||
+
|
||||
+ pr_info("Reserving ESRT space from %p to %p.\n", (void *)esrt_data,
|
||||
+ (char *)esrt_data + size);
|
||||
+ memblock_reserve(esrt_data, esrt_data_size);
|
||||
+
|
||||
+ pr_debug("esrt-init: loaded.\n");
|
||||
+err_memunmap:
|
||||
+ early_memunmap(va, size);
|
||||
+}
|
||||
+
|
||||
+static int __init register_entries(void)
|
||||
+{
|
||||
+ struct efi_system_resource_entry_v1 *v1_entries = (void *)esrt->entries;
|
||||
+ int i, rc;
|
||||
+
|
||||
+ if (!esrt_table_exists())
|
||||
+ return 0;
|
||||
+
|
||||
+ for (i = 0; i < le32_to_cpu(esrt->fw_resource_count); i++) {
|
||||
+ void *entry;
|
||||
+ if (esrt->fw_resource_version == 1) {
|
||||
+ entry = &v1_entries[i];
|
||||
+ }
|
||||
+ rc = esre_create_sysfs_entry(entry, i);
|
||||
+ if (rc < 0) {
|
||||
+ pr_err("ESRT entry creation failed with error %d.\n",
|
||||
+ rc);
|
||||
+ return rc;
|
||||
+ }
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void cleanup_entry_list(void)
|
||||
+{
|
||||
+ struct esre_entry *entry, *next;
|
||||
+
|
||||
+ list_for_each_entry_safe(entry, next, &entry_list, list) {
|
||||
+ kobject_put(&entry->kobj);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int __init esrt_sysfs_init(void)
|
||||
+{
|
||||
+ int error;
|
||||
+ struct efi_system_resource_table __iomem *ioesrt;
|
||||
+
|
||||
+ pr_debug("esrt-sysfs: loading.\n");
|
||||
+ if (!esrt_data || !esrt_data_size)
|
||||
+ return -ENOSYS;
|
||||
+
|
||||
+ ioesrt = ioremap(esrt_data, esrt_data_size);
|
||||
+ if (!ioesrt) {
|
||||
+ pr_err("ioremap(%p, %zu) failed.\n", (void *)esrt_data,
|
||||
+ esrt_data_size);
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ esrt = kmalloc(esrt_data_size, GFP_KERNEL);
|
||||
+ if (!esrt) {
|
||||
+ pr_err("kmalloc failed. (wanted %zu bytes)\n", esrt_data_size);
|
||||
+ iounmap(ioesrt);
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ memcpy_fromio(esrt, ioesrt, esrt_data_size);
|
||||
+
|
||||
+ esrt_kobj = kobject_create_and_add("esrt", efi_kobj);
|
||||
+ if (!esrt_kobj) {
|
||||
+ pr_err("Firmware table registration failed.\n");
|
||||
+ error = -ENOMEM;
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
+ error = sysfs_create_group(esrt_kobj, &esrt_attr_group);
|
||||
+ if (error) {
|
||||
+ pr_err("Sysfs attribute export failed with error %d.\n",
|
||||
+ error);
|
||||
+ goto err_remove_esrt;
|
||||
+ }
|
||||
+
|
||||
+ esrt_kset = kset_create_and_add("entries", NULL, esrt_kobj);
|
||||
+ if (!esrt_kset) {
|
||||
+ pr_err("kset creation failed.\n");
|
||||
+ error = -ENOMEM;
|
||||
+ goto err_remove_group;
|
||||
+ }
|
||||
+
|
||||
+ error = register_entries();
|
||||
+ if (error)
|
||||
+ goto err_cleanup_list;
|
||||
+
|
||||
+ memblock_remove(esrt_data, esrt_data_size);
|
||||
+
|
||||
+ pr_debug("esrt-sysfs: loaded.\n");
|
||||
+
|
||||
+ return 0;
|
||||
+err_cleanup_list:
|
||||
+ cleanup_entry_list();
|
||||
+ kset_unregister(esrt_kset);
|
||||
+err_remove_group:
|
||||
+ sysfs_remove_group(esrt_kobj, &esrt_attr_group);
|
||||
+err_remove_esrt:
|
||||
+ kobject_put(esrt_kobj);
|
||||
+err:
|
||||
+ kfree(esrt);
|
||||
+ esrt = NULL;
|
||||
+ return error;
|
||||
+}
|
||||
+
|
||||
+static void __exit esrt_sysfs_exit(void)
|
||||
+{
|
||||
+ pr_debug("esrt-sysfs: unloading.\n");
|
||||
+ cleanup_entry_list();
|
||||
+ kset_unregister(esrt_kset);
|
||||
+ sysfs_remove_group(esrt_kobj, &esrt_attr_group);
|
||||
+ kfree(esrt);
|
||||
+ esrt = NULL;
|
||||
+ kobject_del(esrt_kobj);
|
||||
+ kobject_put(esrt_kobj);
|
||||
+}
|
||||
+
|
||||
+module_init(esrt_sysfs_init);
|
||||
+module_exit(esrt_sysfs_exit);
|
||||
+
|
||||
+MODULE_AUTHOR("Peter Jones <pjones@redhat.com>");
|
||||
+MODULE_DESCRIPTION("EFI System Resource Table support");
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff --git a/include/linux/efi.h b/include/linux/efi.h
|
||||
index 470e8dfcb517..c15e1de5273c 100644
|
||||
--- a/include/linux/efi.h
|
||||
+++ b/include/linux/efi.h
|
||||
@@ -583,6 +583,9 @@ void efi_native_runtime_setup(void);
|
||||
#define EFI_FILE_INFO_ID \
|
||||
EFI_GUID( 0x9576e92, 0x6d3f, 0x11d2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b )
|
||||
|
||||
+#define EFI_SYSTEM_RESOURCE_TABLE_GUID \
|
||||
+ EFI_GUID( 0xb122a263, 0x3661, 0x4f68, 0x99, 0x29, 0x78, 0xf8, 0xb0, 0xd6, 0x21, 0x80 )
|
||||
+
|
||||
#define EFI_FILE_SYSTEM_GUID \
|
||||
EFI_GUID( 0x964e5b22, 0x6459, 0x11d2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b )
|
||||
|
||||
@@ -849,6 +852,7 @@ extern struct efi {
|
||||
unsigned long fw_vendor; /* fw_vendor */
|
||||
unsigned long runtime; /* runtime table */
|
||||
unsigned long config_table; /* config tables */
|
||||
+ unsigned long esrt; /* ESRT table */
|
||||
efi_get_time_t *get_time;
|
||||
efi_set_time_t *set_time;
|
||||
efi_get_wakeup_time_t *get_wakeup_time;
|
||||
@@ -901,6 +905,7 @@ static inline efi_status_t efi_query_variable_store(u32 attributes, unsigned lon
|
||||
#endif
|
||||
extern void __iomem *efi_lookup_mapped_addr(u64 phys_addr);
|
||||
extern int efi_config_init(efi_config_table_type_t *arch_tables);
|
||||
+extern void __init efi_esrt_init(void);
|
||||
extern int efi_config_parse_tables(void *config_tables, int count, int sz,
|
||||
efi_config_table_type_t *arch_tables);
|
||||
extern u64 efi_get_iobase (void);
|
||||
@@ -908,12 +913,15 @@ extern u32 efi_mem_type (unsigned long phys_addr);
|
||||
extern u64 efi_mem_attributes (unsigned long phys_addr);
|
||||
extern u64 efi_mem_attribute (unsigned long phys_addr, unsigned long size);
|
||||
extern int __init efi_uart_console_only (void);
|
||||
+extern u64 efi_mem_desc_end(efi_memory_desc_t *md);
|
||||
+extern int efi_mem_desc_lookup(u64 phys_addr, efi_memory_desc_t *out_md);
|
||||
extern void efi_initialize_iomem_resources(struct resource *code_resource,
|
||||
struct resource *data_resource, struct resource *bss_resource);
|
||||
extern void efi_get_time(struct timespec *now);
|
||||
extern void efi_reserve_boot_services(void);
|
||||
extern int efi_get_fdt_params(struct efi_fdt_params *params, int verbose);
|
||||
extern struct efi_memory_map memmap;
|
||||
+extern struct kobject *efi_kobj;
|
||||
|
||||
extern int efi_reboot_quirk_mode;
|
||||
extern bool efi_poweroff_required(void);
|
|
@ -1,46 +0,0 @@
|
|||
From: Thierry Reding <treding@nvidia.com>
|
||||
Date: Fri, 6 Feb 2015 11:44:05 +0100
|
||||
Subject: [PATCH] iommu/exynos: Play nice in multi-platform builds
|
||||
|
||||
The Exynos System MMU driver unconditionally executes code and registers
|
||||
a struct iommu_ops with the platform bus irrespective of whether it runs
|
||||
on an Exynos SoC or not. This causes problems in multi-platform kernels
|
||||
where drivers for other SoCs will no longer be able to register their
|
||||
own struct iommu_ops or even try to use a struct iommu_ops for an IOMMU
|
||||
that obviously isn't there.
|
||||
|
||||
The smallest fix I could think of is to check for the existence of any
|
||||
Exynos System MMU devices in the device tree and skip initialization
|
||||
otherwise.
|
||||
|
||||
This fixes a problem on Tegra20 where the DRM driver will try to use the
|
||||
obviously non-existent Exynos System MMU.
|
||||
|
||||
Reported-by: Nicolas Chauvet <kwizart@gmail.com>
|
||||
Cc: Kukjin Kim <kgene@kernel.org>
|
||||
Signed-off-by: Thierry Reding <treding@nvidia.com>
|
||||
Signed-off-by: Joerg Roedel <jroedel@suse.de>
|
||||
---
|
||||
drivers/iommu/exynos-iommu.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
|
||||
index 7ce52737c7a1..dc14fec4ede1 100644
|
||||
--- a/drivers/iommu/exynos-iommu.c
|
||||
+++ b/drivers/iommu/exynos-iommu.c
|
||||
@@ -1186,8 +1186,15 @@ static const struct iommu_ops exynos_iommu_ops = {
|
||||
|
||||
static int __init exynos_iommu_init(void)
|
||||
{
|
||||
+ struct device_node *np;
|
||||
int ret;
|
||||
|
||||
+ np = of_find_matching_node(NULL, sysmmu_of_match);
|
||||
+ if (!np)
|
||||
+ return 0;
|
||||
+
|
||||
+ of_node_put(np);
|
||||
+
|
||||
lv2table_kmem_cache = kmem_cache_create("exynos-iommu-lv2table",
|
||||
LV2TABLE_SIZE, LV2TABLE_SIZE, 0, NULL);
|
||||
if (!lv2table_kmem_cache) {
|
|
@ -1,46 +0,0 @@
|
|||
From: Thierry Reding <treding@nvidia.com>
|
||||
Date: Fri, 6 Feb 2015 11:44:06 +0100
|
||||
Subject: [PATCH] iommu/omap: Play nice in multi-platform builds
|
||||
|
||||
The OMAP IOMMU driver unconditionally executes code and registers a
|
||||
struct iommu_ops with the platform bus irrespective of whether it runs
|
||||
on an OMAP SoC or not. This causes problems in multi-platform kernels
|
||||
where drivers for other SoCs will no longer be able to register their
|
||||
own struct iommu_ops or even try to use a struct iommu_ops for an IOMMU
|
||||
that obviously isn't there.
|
||||
|
||||
The smallest fix I could think of is to check for the existence of any
|
||||
OMAP IOMMU devices in the device tree and skip initialization otherwise.
|
||||
|
||||
This fixes a problem on Tegra20 where the DRM driver will try to use the
|
||||
obviously non-existent OMAP IOMMU.
|
||||
|
||||
Reported-by: Nicolas Chauvet <kwizart@gmail.com>
|
||||
Cc: Tony Lindgren <tony@atomide.com>
|
||||
Cc: Suman Anna <s-anna@ti.com>
|
||||
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
Signed-off-by: Thierry Reding <treding@nvidia.com>
|
||||
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
Signed-off-by: Joerg Roedel <jroedel@suse.de>
|
||||
---
|
||||
drivers/iommu/omap-iommu.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c
|
||||
index bbb7dcef02d3..19db0b684b7f 100644
|
||||
--- a/drivers/iommu/omap-iommu.c
|
||||
+++ b/drivers/iommu/omap-iommu.c
|
||||
@@ -1376,6 +1376,13 @@ static int __init omap_iommu_init(void)
|
||||
struct kmem_cache *p;
|
||||
const unsigned long flags = SLAB_HWCACHE_ALIGN;
|
||||
size_t align = 1 << 10; /* L2 pagetable alignement */
|
||||
+ struct device_node *np;
|
||||
+
|
||||
+ np = of_find_matching_node(NULL, omap_iommu_of_match);
|
||||
+ if (!np)
|
||||
+ return 0;
|
||||
+
|
||||
+ of_node_put(np);
|
||||
|
||||
p = kmem_cache_create("iopte_cache", IOPTE_TABLE_SIZE, align, flags,
|
||||
iopte_cachep_ctor);
|
|
@ -1,49 +0,0 @@
|
|||
From: Thierry Reding <treding@nvidia.com>
|
||||
Date: Fri, 6 Feb 2015 11:44:07 +0100
|
||||
Subject: [PATCH] iommu/rockchip: Play nice in multi-platform builds
|
||||
|
||||
The Rockchip IOMMU driver unconditionally executes code and registers a
|
||||
struct iommu_ops with the platform bus irrespective of whether it runs
|
||||
on a Rockchip SoC or not. This causes problems in multi-platform kernels
|
||||
where drivers for other SoCs will no longer be able to register their
|
||||
own struct iommu_ops or even try to use a struct iommu_ops for an IOMMU
|
||||
that obviously isn't there.
|
||||
|
||||
The smallest fix I could think of is to check for the existence of any
|
||||
Rockchip IOMMU devices in the device tree and skip initialization
|
||||
otherwise.
|
||||
|
||||
This fixes a problem on Tegra20 where the DRM driver will try to use the
|
||||
obviously non-existent Rockchip IOMMU.
|
||||
|
||||
Reported-by: Nicolas Chauvet <kwizart@gmail.com>
|
||||
Cc: Heiko Stuebner <heiko@sntech.de>
|
||||
Cc: Daniel Kurtz <djkurtz@chromium.org>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Tested-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Signed-off-by: Thierry Reding <treding@nvidia.com>
|
||||
Signed-off-by: Joerg Roedel <jroedel@suse.de>
|
||||
---
|
||||
drivers/iommu/rockchip-iommu.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c
|
||||
index 6a8b1ec4a48a..9f74fddcd304 100644
|
||||
--- a/drivers/iommu/rockchip-iommu.c
|
||||
+++ b/drivers/iommu/rockchip-iommu.c
|
||||
@@ -1015,8 +1015,15 @@ static struct platform_driver rk_iommu_driver = {
|
||||
|
||||
static int __init rk_iommu_init(void)
|
||||
{
|
||||
+ struct device_node *np;
|
||||
int ret;
|
||||
|
||||
+ np = of_find_matching_node(NULL, rk_iommu_dt_ids);
|
||||
+ if (!np)
|
||||
+ return 0;
|
||||
+
|
||||
+ of_node_put(np);
|
||||
+
|
||||
ret = bus_set_iommu(&platform_bus_type, &rk_iommu_ops);
|
||||
if (ret)
|
||||
return ret;
|
6793
kernel-arm64.patch
6793
kernel-arm64.patch
File diff suppressed because it is too large
Load Diff
164
kernel.spec
164
kernel.spec
|
@ -48,19 +48,19 @@ Summary: The Linux kernel
|
|||
# base_sublevel is the kernel version we're starting with and patching
|
||||
# on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base,
|
||||
# which yields a base_sublevel of 0.
|
||||
%define base_sublevel 19
|
||||
%define base_sublevel 0
|
||||
|
||||
## If this is a released kernel ##
|
||||
%if 0%{?released_kernel}
|
||||
|
||||
# Do we have a -stable update to apply?
|
||||
%define stable_update 8
|
||||
%define stable_update 3
|
||||
# Set rpm version accordingly
|
||||
%if 0%{?stable_update}
|
||||
%define stablerev %{stable_update}
|
||||
%define stable_base %{stable_update}
|
||||
%endif
|
||||
%define rpmversion 3.%{base_sublevel}.%{stable_update}
|
||||
%define rpmversion 4.%{base_sublevel}.%{stable_update}
|
||||
|
||||
## The not-released-kernel case ##
|
||||
%else
|
||||
|
@ -71,7 +71,7 @@ Summary: The Linux kernel
|
|||
# The git snapshot level
|
||||
%define gitrev 0
|
||||
# Set rpm version accordingly
|
||||
%define rpmversion 3.%{upstream_sublevel}.0
|
||||
%define rpmversion 4.%{upstream_sublevel}.0
|
||||
%endif
|
||||
# Nb: The above rcrev and gitrev values automagically define Patch00 and Patch01 below.
|
||||
|
||||
|
@ -152,7 +152,7 @@ Summary: The Linux kernel
|
|||
%endif
|
||||
|
||||
# The kernel tarball/base version
|
||||
%define kversion 3.%{base_sublevel}
|
||||
%define kversion 4.%{base_sublevel}
|
||||
|
||||
%define make_target bzImage
|
||||
|
||||
|
@ -409,7 +409,7 @@ BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu
|
|||
%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu-
|
||||
%endif
|
||||
|
||||
Source0: ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-%{kversion}.tar.xz
|
||||
Source0: ftp://ftp.kernel.org/pub/linux/kernel/v4.0/linux-%{kversion}.tar.xz
|
||||
|
||||
Source10: perf-man-%{kversion}.tar.gz
|
||||
Source11: x509.genkey
|
||||
|
@ -471,7 +471,7 @@ Source2001: cpupower.config
|
|||
# For a stable release kernel
|
||||
%if 0%{?stable_update}
|
||||
%if 0%{?stable_base}
|
||||
%define stable_patch_00 patch-3.%{base_sublevel}.%{stable_base}.xz
|
||||
%define stable_patch_00 patch-4.%{base_sublevel}.%{stable_base}.xz
|
||||
Patch00: %{stable_patch_00}
|
||||
%endif
|
||||
|
||||
|
@ -480,14 +480,14 @@ Patch00: %{stable_patch_00}
|
|||
# near the top of this spec file.
|
||||
%else
|
||||
%if 0%{?rcrev}
|
||||
Patch00: patch-3.%{upstream_sublevel}-rc%{rcrev}.xz
|
||||
Patch00: patch-4.%{upstream_sublevel}-rc%{rcrev}.xz
|
||||
%if 0%{?gitrev}
|
||||
Patch01: patch-3.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.xz
|
||||
Patch01: patch-4.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.xz
|
||||
%endif
|
||||
%else
|
||||
# pre-{base_sublevel+1}-rc1 case
|
||||
%if 0%{?gitrev}
|
||||
Patch00: patch-3.%{base_sublevel}-git%{gitrev}.xz
|
||||
Patch00: patch-4.%{base_sublevel}-git%{gitrev}.xz
|
||||
%endif
|
||||
%endif
|
||||
%endif
|
||||
|
@ -550,15 +550,16 @@ Patch1018: MODSIGN-Support-not-importing-certs-from-db.patch
|
|||
|
||||
Patch1019: Add-sysrq-option-to-disable-secure-boot-mode.patch
|
||||
|
||||
# esrt
|
||||
Patch1020: efi-Add-esrt-support.patch
|
||||
|
||||
# virt + ksm patches
|
||||
|
||||
# DRM
|
||||
|
||||
# nouveau + drm fixes
|
||||
# intel drm is all merged upstream
|
||||
Patch1825: drm-i915-tame-the-chattermouth-v2.patch
|
||||
Patch1826: drm-i915-hush-check-crtc-state.patch
|
||||
Patch1827: drm-i915-Disable-verbose-state-checks.patch
|
||||
|
||||
# Quiet boot fixes
|
||||
|
||||
|
@ -578,6 +579,10 @@ Patch15000: watchdog-Disable-watchdog-on-virtual-machines.patch
|
|||
# PPC
|
||||
|
||||
# ARM64
|
||||
Patch21000: net-amd-Add-xgbe-a0-driver.patch
|
||||
Patch21001: amd-xgbe-phy-a0-Add-support-for-XGBE-PHY-on-A0.patch
|
||||
Patch21002: arm64-avoid-needing-console-to-enable-serial-console.patch
|
||||
Patch21003: usb-make-xhci-platform-driver-use-64-bit-or-32-bit-D.patch
|
||||
|
||||
# ARMv7
|
||||
Patch21020: ARM-tegra-usb-no-reset.patch
|
||||
|
@ -587,14 +592,9 @@ Patch21023: arm-dts-am335x-bone-common-enable-and-use-i2c2.patch
|
|||
Patch21024: arm-dts-am335x-bone-common-setup-default-pinmux-http.patch
|
||||
Patch21025: arm-dts-am335x-bone-common-add-uart2_pins-uart4_pins.patch
|
||||
Patch21026: pinctrl-pinctrl-single-must-be-initialized-early.patch
|
||||
|
||||
Patch21027: 0001-drivers-rtc-rtc-em3027.c-add-device-tree-support.patch
|
||||
Patch21028: arm-i.MX6-Utilite-device-dtb.patch
|
||||
|
||||
# IOMMU crash fixes - https://lists.linuxfoundation.org/pipermail/iommu/2015-February/012329.html
|
||||
Patch21030: iommu-omap-Play-nice-in-multi-platform-builds.patch
|
||||
Patch21031: iommu-exynos-Play-nice-in-multi-platform-builds.patch
|
||||
Patch21032: iommu-rockchip-Play-nice-in-multi-platform-builds.patch
|
||||
|
||||
Patch21100: arm-highbank-l2-reverts.patch
|
||||
|
||||
#rhbz 754518
|
||||
|
@ -611,21 +611,11 @@ Patch22000: weird-root-dentry-name-debug.patch
|
|||
#rhbz 1094948
|
||||
Patch26131: acpi-video-Add-disable_native_backlight-quirk-for-Sa.patch
|
||||
|
||||
#rhbz 1186097
|
||||
Patch26135: acpi-video-add-disable_native_backlight_quirk_for_samsung_510r.patch
|
||||
|
||||
#CVE-XXXX-XXXX rhbz 1189864 1192079
|
||||
Patch26136: vhost-scsi-potential-memory-corruption.patch
|
||||
|
||||
#CVE-2015-0275 rhbz 1193907 1195178
|
||||
Patch26138: ext4-Allocate-entire-range-in-zero-range.patch
|
||||
|
||||
#rhbz 1200777 1200778
|
||||
Patch26159: Input-synaptics-retrieve-the-extended-capabilities-i.patch
|
||||
Patch26160: Input-synaptics-remove-TOPBUTTONPAD-property-for-Len.patch
|
||||
Patch26161: Input-synaptics-re-route-tracksticks-buttons-on-the-.patch
|
||||
Patch26162: Input-synaptics-remove-X1-Carbon-3rd-gen-from-the-to.patch
|
||||
Patch26163: Input-synaptics-remove-X250-from-the-topbuttonpad-li.patch
|
||||
#rhbz 1196825
|
||||
Patch26140: security-yama-Remove-unnecessary-selects-from-Kconfi.patch
|
||||
|
||||
#rhbz 1201532
|
||||
Patch26168: HID-multitouch-add-support-of-clickpads.patch
|
||||
|
@ -634,29 +624,26 @@ Patch26168: HID-multitouch-add-support-of-clickpads.patch
|
|||
Patch26170: acpi-video-Allow-forcing-native-backlight-on-non-win.patch
|
||||
Patch26171: acpi-video-Add-force-native-backlight-quirk-for-Leno.patch
|
||||
|
||||
#CVE-2015-2666 rhbz 1204724 1204722
|
||||
Patch26172: x86-microcode-intel-Guard-against-stack-overflow-in-.patch
|
||||
|
||||
# git clone ssh://git.fedorahosted.org/git/kernel-arm64.git, git diff master...devel
|
||||
Patch30000: kernel-arm64.patch
|
||||
|
||||
#CVE-2015-2150 rhbz 1196266 1200397
|
||||
Patch26175: xen-pciback-Don-t-disable-PCI_COMMAND-on-PCI-device-.patch
|
||||
|
||||
#rhbz 1208953
|
||||
Patch26179: pty-Fix-input-race-when-closing.patch
|
||||
Patch26178: pty-Fix-input-race-when-closing.patch
|
||||
|
||||
#rhbz 1210801
|
||||
Patch26180: HID-logitech-hidpp-add-a-module-parameter-to-keep-fi.patch
|
||||
Patch26179: HID-logitech-hidpp-add-a-module-parameter-to-keep-fi.patch
|
||||
|
||||
#rhbz 1205083
|
||||
Patch26181: 0001-iwlwifi-mvm-remove-WARN_ON-for-invalid-BA-notificati.patch
|
||||
#rhbz 1209088
|
||||
Patch26180: Input-atmel_mxt_ts-implement-support-for-T100-touch-.patch
|
||||
Patch26181: Input-atmel_mxt_ts-split-out-touchpad-initialisation.patch
|
||||
Patch26182: Input-atmel_mxt_ts-add-support-for-Google-Pixel-2.patch
|
||||
|
||||
#rhbz 1208999
|
||||
Patch26182: SCSI-add-1024-max-sectors-black-list-flag.patch
|
||||
#rhbz 1188741
|
||||
Patch26183: 0001-ALSA-hda-realtek-Support-Dell-headset-mode-for-ALC28.patch
|
||||
Patch26184: 0001-ALSA-hda-realtek-Support-headset-mode-for-ALC286-288.patch
|
||||
|
||||
#rhbz 1204390
|
||||
Patch26189: 0001-cx18-add-missing-caps-for-the-PCM-video-device.patch
|
||||
#rhbz 1210857
|
||||
Patch26192: blk-loop-avoid-too-many-pending-per-work-IO.patch
|
||||
|
||||
#rhbz 1206036 1215989
|
||||
Patch26193: toshiba_acpi-Do-not-register-vendor-backlight-when-a.patch
|
||||
|
@ -664,6 +651,12 @@ Patch26193: toshiba_acpi-Do-not-register-vendor-backlight-when-a.patch
|
|||
#rhbz 1218662
|
||||
Patch26199: libata-Blacklist-queued-TRIM-on-all-Samsung-800-seri.patch
|
||||
|
||||
#rhbz 1219343
|
||||
Patch26200: 0001-HID-usbhid-Add-HID_QUIRK_NOGET-for-Aten-DVI-KVM-swit.patch
|
||||
|
||||
#rhbz 1220915
|
||||
Patch26201: ovl-don-t-remove-non-empty-opaque-directory.patch
|
||||
|
||||
# END OF PATCH DEFINITIONS
|
||||
|
||||
%endif
|
||||
|
@ -1028,7 +1021,7 @@ ApplyPatch()
|
|||
exit 1
|
||||
fi
|
||||
if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME%%%%%{?variant}}.spec ; then
|
||||
if [ "${patch:0:8}" != "patch-3." ] ; then
|
||||
if [ "${patch:0:8}" != "patch-4." ] ; then
|
||||
echo "ERROR: Patch $patch not listed as a source patch in specfile"
|
||||
exit 1
|
||||
fi
|
||||
|
@ -1061,20 +1054,20 @@ ApplyOptionalPatch()
|
|||
|
||||
# Update to latest upstream.
|
||||
%if 0%{?released_kernel}
|
||||
%define vanillaversion 3.%{base_sublevel}
|
||||
%define vanillaversion 4.%{base_sublevel}
|
||||
# non-released_kernel case
|
||||
%else
|
||||
%if 0%{?rcrev}
|
||||
%define vanillaversion 3.%{upstream_sublevel}-rc%{rcrev}
|
||||
%define vanillaversion 4.%{upstream_sublevel}-rc%{rcrev}
|
||||
%if 0%{?gitrev}
|
||||
%define vanillaversion 3.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}
|
||||
%define vanillaversion 4.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}
|
||||
%endif
|
||||
%else
|
||||
# pre-{base_sublevel+1}-rc1 case
|
||||
%if 0%{?gitrev}
|
||||
%define vanillaversion 3.%{base_sublevel}-git%{gitrev}
|
||||
%define vanillaversion 4.%{base_sublevel}-git%{gitrev}
|
||||
%else
|
||||
%define vanillaversion 3.%{base_sublevel}
|
||||
%define vanillaversion 4.%{base_sublevel}
|
||||
%endif
|
||||
%endif
|
||||
%endif
|
||||
|
@ -1087,7 +1080,7 @@ ApplyOptionalPatch()
|
|||
|
||||
# Build a list of the other top-level kernel tree directories.
|
||||
# This will be used to hardlink identical vanilla subdirs.
|
||||
sharedirs=$(find "$PWD" -maxdepth 1 -type d -name 'kernel-3.*' \
|
||||
sharedirs=$(find "$PWD" -maxdepth 1 -type d -name 'kernel-4.*' \
|
||||
| grep -x -v "$PWD"/kernel-%{kversion}%{?dist}) ||:
|
||||
|
||||
# Delete all old stale trees.
|
||||
|
@ -1158,14 +1151,14 @@ if [ ! -d kernel-%{kversion}%{?dist}/vanilla-%{vanillaversion} ]; then
|
|||
# Update vanilla to the latest upstream.
|
||||
# (non-released_kernel case only)
|
||||
%if 0%{?rcrev}
|
||||
ApplyPatch patch-3.%{upstream_sublevel}-rc%{rcrev}.xz
|
||||
ApplyPatch patch-4.%{upstream_sublevel}-rc%{rcrev}.xz
|
||||
%if 0%{?gitrev}
|
||||
ApplyPatch patch-3.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.xz
|
||||
ApplyPatch patch-4.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.xz
|
||||
%endif
|
||||
%else
|
||||
# pre-{base_sublevel+1}-rc1 case
|
||||
%if 0%{?gitrev}
|
||||
ApplyPatch patch-3.%{base_sublevel}-git%{gitrev}.xz
|
||||
ApplyPatch patch-4.%{base_sublevel}-git%{gitrev}.xz
|
||||
%endif
|
||||
%endif
|
||||
|
||||
|
@ -1236,25 +1229,24 @@ ApplyPatch lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch
|
|||
# PPC
|
||||
|
||||
# ARM64
|
||||
ApplyPatch net-amd-Add-xgbe-a0-driver.patch
|
||||
ApplyPatch amd-xgbe-phy-a0-Add-support-for-XGBE-PHY-on-A0.patch
|
||||
ApplyPatch arm64-avoid-needing-console-to-enable-serial-console.patch
|
||||
ApplyPatch usb-make-xhci-platform-driver-use-64-bit-or-32-bit-D.patch
|
||||
|
||||
#
|
||||
# ARM
|
||||
#
|
||||
ApplyPatch ARM-tegra-usb-no-reset.patch
|
||||
|
||||
ApplyPatch arm-dts-am335x-boneblack-lcdc-add-panel-info.patch
|
||||
ApplyPatch arm-dts-am335x-boneblack-add-cpu0-opp-points.patch
|
||||
ApplyPatch arm-dts-am335x-bone-common-enable-and-use-i2c2.patch
|
||||
ApplyPatch arm-dts-am335x-bone-common-setup-default-pinmux-http.patch
|
||||
ApplyPatch arm-dts-am335x-bone-common-add-uart2_pins-uart4_pins.patch
|
||||
ApplyPatch pinctrl-pinctrl-single-must-be-initialized-early.patch
|
||||
|
||||
ApplyPatch 0001-drivers-rtc-rtc-em3027.c-add-device-tree-support.patch
|
||||
ApplyPatch arm-i.MX6-Utilite-device-dtb.patch
|
||||
|
||||
ApplyPatch iommu-omap-Play-nice-in-multi-platform-builds.patch
|
||||
ApplyPatch iommu-exynos-Play-nice-in-multi-platform-builds.patch
|
||||
ApplyPatch iommu-rockchip-Play-nice-in-multi-platform-builds.patch
|
||||
|
||||
ApplyPatch arm-highbank-l2-reverts.patch
|
||||
|
||||
#
|
||||
|
@ -1341,6 +1333,8 @@ ApplyPatch MODSIGN-Support-not-importing-certs-from-db.patch
|
|||
|
||||
ApplyPatch Add-sysrq-option-to-disable-secure-boot-mode.patch
|
||||
|
||||
ApplyPatch efi-Add-esrt-support.patch
|
||||
|
||||
# Assorted Virt Fixes
|
||||
|
||||
# DRM core
|
||||
|
@ -1348,9 +1342,7 @@ ApplyPatch Add-sysrq-option-to-disable-secure-boot-mode.patch
|
|||
# Nouveau DRM
|
||||
|
||||
# Intel DRM
|
||||
ApplyPatch drm-i915-tame-the-chattermouth-v2.patch
|
||||
ApplyPatch drm-i915-hush-check-crtc-state.patch
|
||||
ApplyPatch drm-i915-Disable-verbose-state-checks.patch
|
||||
|
||||
# Radeon DRM
|
||||
|
||||
|
@ -1379,21 +1371,11 @@ ApplyPatch ath9k-rx-dma-stop-check.patch
|
|||
#rhbz 1094948
|
||||
ApplyPatch acpi-video-Add-disable_native_backlight-quirk-for-Sa.patch
|
||||
|
||||
#rhbz 1186097
|
||||
ApplyPatch acpi-video-add-disable_native_backlight_quirk_for_samsung_510r.patch
|
||||
|
||||
#CVE-XXXX-XXXX rhbz 1189864 1192079
|
||||
ApplyPatch vhost-scsi-potential-memory-corruption.patch
|
||||
|
||||
#CVE-2015-0275 rhbz 1193907 1195178
|
||||
ApplyPatch ext4-Allocate-entire-range-in-zero-range.patch
|
||||
|
||||
#rhbz 1200777 1200778
|
||||
ApplyPatch Input-synaptics-retrieve-the-extended-capabilities-i.patch
|
||||
ApplyPatch Input-synaptics-remove-TOPBUTTONPAD-property-for-Len.patch
|
||||
ApplyPatch Input-synaptics-re-route-tracksticks-buttons-on-the-.patch
|
||||
ApplyPatch Input-synaptics-remove-X1-Carbon-3rd-gen-from-the-to.patch
|
||||
ApplyPatch Input-synaptics-remove-X250-from-the-topbuttonpad-li.patch
|
||||
#rhbz 1196825
|
||||
ApplyPatch security-yama-Remove-unnecessary-selects-from-Kconfi.patch
|
||||
|
||||
#rhbz 1201532
|
||||
ApplyPatch HID-multitouch-add-support-of-clickpads.patch
|
||||
|
@ -1402,16 +1384,6 @@ ApplyPatch HID-multitouch-add-support-of-clickpads.patch
|
|||
ApplyPatch acpi-video-Allow-forcing-native-backlight-on-non-win.patch
|
||||
ApplyPatch acpi-video-Add-force-native-backlight-quirk-for-Leno.patch
|
||||
|
||||
#CVE-2015-2666 rhbz 1204724 1204722
|
||||
ApplyPatch x86-microcode-intel-Guard-against-stack-overflow-in-.patch
|
||||
|
||||
%if 0%{?aarch64patches}
|
||||
ApplyPatch kernel-arm64.patch
|
||||
%ifnarch aarch64 # this is stupid, but i want to notice before secondary koji does.
|
||||
ApplyPatch kernel-arm64.patch -R
|
||||
%endif
|
||||
%endif
|
||||
|
||||
#CVE-2015-2150 rhbz 1196266 1200397
|
||||
ApplyPatch xen-pciback-Don-t-disable-PCI_COMMAND-on-PCI-device-.patch
|
||||
|
||||
|
@ -1421,14 +1393,17 @@ ApplyPatch pty-Fix-input-race-when-closing.patch
|
|||
#rhbz 1210801
|
||||
ApplyPatch HID-logitech-hidpp-add-a-module-parameter-to-keep-fi.patch
|
||||
|
||||
#rhbz 1205083
|
||||
ApplyPatch 0001-iwlwifi-mvm-remove-WARN_ON-for-invalid-BA-notificati.patch
|
||||
#rhbz 1209088
|
||||
ApplyPatch Input-atmel_mxt_ts-implement-support-for-T100-touch-.patch
|
||||
ApplyPatch Input-atmel_mxt_ts-split-out-touchpad-initialisation.patch
|
||||
ApplyPatch Input-atmel_mxt_ts-add-support-for-Google-Pixel-2.patch
|
||||
|
||||
#rhbz 1208999
|
||||
ApplyPatch SCSI-add-1024-max-sectors-black-list-flag.patch
|
||||
#rhbz 1188741
|
||||
ApplyPatch 0001-ALSA-hda-realtek-Support-Dell-headset-mode-for-ALC28.patch
|
||||
ApplyPatch 0001-ALSA-hda-realtek-Support-headset-mode-for-ALC286-288.patch
|
||||
|
||||
#rhbz 1204390
|
||||
ApplyPatch 0001-cx18-add-missing-caps-for-the-PCM-video-device.patch
|
||||
#rhbz 1210857
|
||||
ApplyPatch blk-loop-avoid-too-many-pending-per-work-IO.patch
|
||||
|
||||
#rhbz 1206036 1215989
|
||||
ApplyPatch toshiba_acpi-Do-not-register-vendor-backlight-when-a.patch
|
||||
|
@ -1436,6 +1411,12 @@ ApplyPatch toshiba_acpi-Do-not-register-vendor-backlight-when-a.patch
|
|||
#rhbz 1218662
|
||||
ApplyPatch libata-Blacklist-queued-TRIM-on-all-Samsung-800-seri.patch
|
||||
|
||||
#rhbz 1219343
|
||||
ApplyPatch 0001-HID-usbhid-Add-HID_QUIRK_NOGET-for-Aten-DVI-KVM-swit.patch
|
||||
|
||||
#rhbz 1220915
|
||||
ApplyPatch ovl-don-t-remove-non-empty-opaque-directory.patch
|
||||
|
||||
# END OF PATCH APPLICATIONS
|
||||
|
||||
%endif
|
||||
|
@ -2295,6 +2276,9 @@ fi
|
|||
# ||----w |
|
||||
# || ||
|
||||
%changelog
|
||||
* Thu May 14 2015 Justin M. Forbes <jforbes@fedoraproject.org> - 4.0.3-200
|
||||
- Linux v4.0.3
|
||||
|
||||
* Mon May 11 2015 Laura Abbott <labbott@fedoraproject.org> - 3.19.8-200
|
||||
- Linux v3.19.8
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,57 @@
|
|||
From: Miklos Szeredi <mszeredi@suse.cz>
|
||||
Date: Thu, 14 May 2015 10:04:44 +0200
|
||||
Subject: [PATCH] ovl: don't remove non-empty opaque directory
|
||||
|
||||
When removing an opaque directory we can't just call rmdir() to check for
|
||||
emptiness, because the directory will need to be replaced with a whiteout.
|
||||
The replacement is done with RENAME_EXCHANGE, which doesn't check
|
||||
emptiness.
|
||||
|
||||
Solution is just to check emptiness by reading the directory. In the
|
||||
future we could add a new rename flag to check for emptiness even for
|
||||
RENAME_EXCHANGE to optimize this case.
|
||||
|
||||
Reported-by: Vincent Batts <vbatts@gmail.com>
|
||||
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
|
||||
Tested-by: Jordi Pujol Palomer <jordipujolp@gmail.com>
|
||||
Fixes: 263b4a0fee43 ("ovl: dont replace opaque dir")
|
||||
Cc: <stable@vger.kernel.org> # v4.0+
|
||||
---
|
||||
fs/overlayfs/dir.c | 24 +++++++++++++++++++-----
|
||||
1 file changed, 19 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
|
||||
index d139405d2bfa..2578a0c0677d 100644
|
||||
--- a/fs/overlayfs/dir.c
|
||||
+++ b/fs/overlayfs/dir.c
|
||||
@@ -506,11 +506,25 @@ static int ovl_remove_and_whiteout(struct dentry *dentry, bool is_dir)
|
||||
struct dentry *opaquedir = NULL;
|
||||
int err;
|
||||
|
||||
- if (is_dir && OVL_TYPE_MERGE_OR_LOWER(ovl_path_type(dentry))) {
|
||||
- opaquedir = ovl_check_empty_and_clear(dentry);
|
||||
- err = PTR_ERR(opaquedir);
|
||||
- if (IS_ERR(opaquedir))
|
||||
- goto out;
|
||||
+ if (is_dir) {
|
||||
+ if (OVL_TYPE_MERGE_OR_LOWER(ovl_path_type(dentry))) {
|
||||
+ opaquedir = ovl_check_empty_and_clear(dentry);
|
||||
+ err = PTR_ERR(opaquedir);
|
||||
+ if (IS_ERR(opaquedir))
|
||||
+ goto out;
|
||||
+ } else {
|
||||
+ LIST_HEAD(list);
|
||||
+
|
||||
+ /*
|
||||
+ * When removing an empty opaque directory, then it
|
||||
+ * makes no sense to replace it with an exact replica of
|
||||
+ * itself. But emptiness still needs to be checked.
|
||||
+ */
|
||||
+ err = ovl_check_empty_dir(dentry, &list);
|
||||
+ ovl_cache_free(&list);
|
||||
+ if (err)
|
||||
+ goto out;
|
||||
+ }
|
||||
}
|
||||
|
||||
err = ovl_lock_rename_workdir(workdir, upperdir);
|
|
@ -105,11 +105,11 @@ index 644ddb841d9f..bbc4ce66c2c1 100644
|
|||
if (tty_hung_up_p(filp))
|
||||
mask |= POLLHUP;
|
||||
diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
|
||||
index 6f8cf3a52861..f9d9ed3f7e18 100644
|
||||
index cf6e0f2e1331..cc57a3a6b02b 100644
|
||||
--- a/drivers/tty/n_tty.c
|
||||
+++ b/drivers/tty/n_tty.c
|
||||
@@ -1960,6 +1960,18 @@ static inline int input_available_p(struct tty_struct *tty, int poll)
|
||||
return read_cnt(ldata) >= amt;
|
||||
@@ -1949,6 +1949,18 @@ static inline int input_available_p(struct tty_struct *tty, int poll)
|
||||
return ldata->commit_head - ldata->read_tail >= amt;
|
||||
}
|
||||
|
||||
+static inline int check_other_done(struct tty_struct *tty)
|
||||
|
@ -127,7 +127,7 @@ index 6f8cf3a52861..f9d9ed3f7e18 100644
|
|||
/**
|
||||
* copy_from_read_buf - copy read data directly
|
||||
* @tty: terminal device
|
||||
@@ -2177,7 +2189,7 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,
|
||||
@@ -2167,7 +2179,7 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,
|
||||
struct n_tty_data *ldata = tty->disc_data;
|
||||
unsigned char __user *b = buf;
|
||||
DEFINE_WAIT_FUNC(wait, woken_wake_function);
|
||||
|
@ -136,7 +136,7 @@ index 6f8cf3a52861..f9d9ed3f7e18 100644
|
|||
int minimum, time;
|
||||
ssize_t retval = 0;
|
||||
long timeout;
|
||||
@@ -2243,8 +2255,10 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,
|
||||
@@ -2235,8 +2247,10 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,
|
||||
((minimum - (b - buf)) >= 1))
|
||||
ldata->minimum_to_wake = (minimum - (b - buf));
|
||||
|
||||
|
@ -148,7 +148,7 @@ index 6f8cf3a52861..f9d9ed3f7e18 100644
|
|||
retval = -EIO;
|
||||
break;
|
||||
}
|
||||
@@ -2451,12 +2465,12 @@ static unsigned int n_tty_poll(struct tty_struct *tty, struct file *file,
|
||||
@@ -2443,12 +2457,12 @@ static unsigned int n_tty_poll(struct tty_struct *tty, struct file *file,
|
||||
|
||||
poll_wait(file, &tty->read_wait, wait);
|
||||
poll_wait(file, &tty->write_wait, wait);
|
||||
|
@ -164,7 +164,7 @@ index 6f8cf3a52861..f9d9ed3f7e18 100644
|
|||
mask |= POLLHUP;
|
||||
if (!(mask & (POLLHUP | POLLIN | POLLRDNORM))) {
|
||||
diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
|
||||
index 6e1f1505f04e..ca7b68968203 100644
|
||||
index e72ee629cead..4d5e8409769c 100644
|
||||
--- a/drivers/tty/pty.c
|
||||
+++ b/drivers/tty/pty.c
|
||||
@@ -53,9 +53,8 @@ static void pty_close(struct tty_struct *tty, struct file *filp)
|
||||
|
@ -178,7 +178,7 @@ index 6e1f1505f04e..ca7b68968203 100644
|
|||
wake_up_interruptible(&tty->link->write_wait);
|
||||
if (tty->driver->subtype == PTY_TYPE_MASTER) {
|
||||
set_bit(TTY_OTHER_CLOSED, &tty->flags);
|
||||
@@ -250,7 +249,9 @@ static int pty_open(struct tty_struct *tty, struct file *filp)
|
||||
@@ -243,7 +242,9 @@ static int pty_open(struct tty_struct *tty, struct file *filp)
|
||||
goto out;
|
||||
|
||||
clear_bit(TTY_IO_ERROR, &tty->flags);
|
||||
|
@ -189,7 +189,7 @@ index 6e1f1505f04e..ca7b68968203 100644
|
|||
return 0;
|
||||
|
||||
diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c
|
||||
index 3605103fc1ac..79bcdf93568b 100644
|
||||
index 75661641f5fe..2f78b77f0f81 100644
|
||||
--- a/drivers/tty/tty_buffer.c
|
||||
+++ b/drivers/tty/tty_buffer.c
|
||||
@@ -37,6 +37,28 @@
|
||||
|
@ -263,10 +263,10 @@ index 3605103fc1ac..79bcdf93568b 100644
|
|||
* @port: tty port to push
|
||||
*
|
||||
diff --git a/include/linux/tty.h b/include/linux/tty.h
|
||||
index 7d66ae508e5c..8716524f0b25 100644
|
||||
index 358a337af598..790752ac074a 100644
|
||||
--- a/include/linux/tty.h
|
||||
+++ b/include/linux/tty.h
|
||||
@@ -316,6 +316,7 @@ struct tty_file_private {
|
||||
@@ -339,6 +339,7 @@ struct tty_file_private {
|
||||
#define TTY_EXCLUSIVE 3 /* Exclusive open mode */
|
||||
#define TTY_DEBUG 4 /* Debugging */
|
||||
#define TTY_DO_WRITE_WAKEUP 5 /* Call write_wakeup after queuing new */
|
||||
|
@ -274,7 +274,7 @@ index 7d66ae508e5c..8716524f0b25 100644
|
|||
#define TTY_LDISC_OPEN 11 /* Line discipline is open */
|
||||
#define TTY_PTY_LOCK 16 /* pty private */
|
||||
#define TTY_NO_WRITE_SPLIT 17 /* Preserve write boundaries to driver */
|
||||
@@ -439,7 +440,6 @@ extern int tty_hung_up_p(struct file *filp);
|
||||
@@ -462,7 +463,6 @@ extern int tty_hung_up_p(struct file *filp);
|
||||
extern void do_SAK(struct tty_struct *tty);
|
||||
extern void __do_SAK(struct tty_struct *tty);
|
||||
extern void no_tty(void);
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
From: Stephen Smalley <sds@tycho.nsa.gov>
|
||||
Date: Fri, 27 Feb 2015 16:23:59 -0500
|
||||
Subject: [PATCH] security/yama: Remove unnecessary selects from Kconfig.
|
||||
|
||||
Yama selects SECURITYFS and SECURITY_PATH, but requires neither.
|
||||
Remove them.
|
||||
|
||||
Signed-off-by: Stephen Smalley <sds@tycho.nsa.gov>
|
||||
---
|
||||
security/yama/Kconfig | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/security/yama/Kconfig b/security/yama/Kconfig
|
||||
index 20ef5143c0c0..3123e1da2fed 100644
|
||||
--- a/security/yama/Kconfig
|
||||
+++ b/security/yama/Kconfig
|
||||
@@ -1,8 +1,6 @@
|
||||
config SECURITY_YAMA
|
||||
bool "Yama support"
|
||||
depends on SECURITY
|
||||
- select SECURITYFS
|
||||
- select SECURITY_PATH
|
||||
default n
|
||||
help
|
||||
This selects Yama, which extends DAC support with additional
|
6
sources
6
sources
|
@ -1,3 +1,3 @@
|
|||
d3fc8316d4d4d04b65cbc2d70799e763 linux-3.19.tar.xz
|
||||
15d8d2f97ce056488451a5bfb2944603 perf-man-3.19.tar.gz
|
||||
a450d6f46c2397dec767ac409111c144 patch-3.19.8.xz
|
||||
a86916bd12798220da9eb4a1eec3616d linux-4.0.tar.xz
|
||||
d125eecce68ab6fb5f1f23523c2c04b8 perf-man-4.0.tar.gz
|
||||
0ccd3969e595402f4f6bed790d5481a6 patch-4.0.3.xz
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 14 Apr 2015 11:15:24 +0200
|
||||
Date: Tue, 21 Apr 2015 12:01:32 +0200
|
||||
Subject: [PATCH] toshiba_acpi: Do not register vendor backlight when
|
||||
acpi_video bl is available
|
||||
|
||||
|
@ -22,14 +22,18 @@ acpi-video implementation while the toshiba vendor backlight interface does
|
|||
work, this commit adds an empty dmi_id table where such systems can be added,
|
||||
this is identical to how other drivers handle such systems.
|
||||
|
||||
BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1206036
|
||||
BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=86521
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Reviewed-and-tested-by: Azael Avalos <coproscefalo@gmail.com>
|
||||
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
|
||||
---
|
||||
drivers/platform/x86/Kconfig | 1 +
|
||||
drivers/platform/x86/toshiba_acpi.c | 23 +++++++++++++++++++++++
|
||||
2 files changed, 24 insertions(+)
|
||||
|
||||
diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
|
||||
index 638e797037da..c3fd78820d07 100644
|
||||
index 97527614141b..f9f205cb1f11 100644
|
||||
--- a/drivers/platform/x86/Kconfig
|
||||
+++ b/drivers/platform/x86/Kconfig
|
||||
@@ -614,6 +614,7 @@ config ACPI_TOSHIBA
|
||||
|
@ -41,22 +45,21 @@ index 638e797037da..c3fd78820d07 100644
|
|||
select INPUT_SPARSEKMAP
|
||||
---help---
|
||||
diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
|
||||
index fc34a71866ed..1c5879ae3b53 100644
|
||||
index dbcb7a8915b8..2da716c3b648 100644
|
||||
--- a/drivers/platform/x86/toshiba_acpi.c
|
||||
+++ b/drivers/platform/x86/toshiba_acpi.c
|
||||
@@ -57,6 +57,7 @@
|
||||
#include <linux/i8042.h>
|
||||
@@ -51,6 +51,7 @@
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/uaccess.h>
|
||||
+#include <acpi/video.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
MODULE_AUTHOR("John Belmonte");
|
||||
@@ -264,6 +265,14 @@ static const struct key_entry toshiba_acpi_alt_keymap[] = {
|
||||
{ KE_END, 0 },
|
||||
MODULE_DESCRIPTION("Toshiba Laptop ACPI Extras Driver");
|
||||
@@ -281,6 +282,14 @@ static const struct key_entry toshiba_acpi_alt_keymap[] = {
|
||||
};
|
||||
|
||||
+/*
|
||||
/*
|
||||
+ * List of models which have a broken acpi-video backlight interface and thus
|
||||
+ * need to use the toshiba (vendor) interface instead.
|
||||
+ */
|
||||
|
@ -64,10 +67,11 @@ index fc34a71866ed..1c5879ae3b53 100644
|
|||
+ {}
|
||||
+};
|
||||
+
|
||||
/* utility
|
||||
+/*
|
||||
* Utility
|
||||
*/
|
||||
|
||||
@@ -1798,6 +1807,20 @@ static int toshiba_acpi_setup_backlight(struct toshiba_acpi_dev *dev)
|
||||
@@ -2541,6 +2550,20 @@ static int toshiba_acpi_setup_backlight(struct toshiba_acpi_dev *dev)
|
||||
ret = get_tr_backlight_status(dev, &enabled);
|
||||
dev->tr_backlight_supported = !ret;
|
||||
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
From: Mark Langsdorf <mlangsdo@redhat.com>
|
||||
Date: Wed, 25 Mar 2015 14:12:51 -0400
|
||||
Subject: [PATCH] usb: make xhci platform driver use 64 bit or 32 bit DMA
|
||||
|
||||
The xhci platform driver needs to work on systems that either only
|
||||
support 64-bit DMA or only support 32-bit DMA. Attempt to set a
|
||||
coherent dma mask for 64-bit DMA, and attempt again with 32-bit
|
||||
DMA if that fails.
|
||||
|
||||
Signed-off-by: Mark Langsdorf <mlangsdo@redhat.com>
|
||||
---
|
||||
drivers/usb/host/xhci-plat.c | 15 +++++++--------
|
||||
1 file changed, 7 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
|
||||
index 0e11d61408ff..cc5ca2cac706 100644
|
||||
--- a/drivers/usb/host/xhci-plat.c
|
||||
+++ b/drivers/usb/host/xhci-plat.c
|
||||
@@ -83,14 +83,13 @@ static int xhci_plat_probe(struct platform_device *pdev)
|
||||
if (irq < 0)
|
||||
return -ENODEV;
|
||||
|
||||
- /* Initialize dma_mask and coherent_dma_mask to 32-bits */
|
||||
- ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
|
||||
- if (ret)
|
||||
- return ret;
|
||||
- if (!pdev->dev.dma_mask)
|
||||
- pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask;
|
||||
- else
|
||||
- dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
|
||||
+ /* Try setting the coherent_dma_mask to 64 bits, then try 32 bits */
|
||||
+ ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
|
||||
+ if (ret) {
|
||||
+ ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+ }
|
||||
|
||||
hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev));
|
||||
if (!hcd)
|
|
@ -1,50 +0,0 @@
|
|||
From: Dan Carpenter <dan.carpenter@oracle.com>
|
||||
Date: Thu, 5 Feb 2015 10:37:33 +0300
|
||||
Subject: [PATCH] vhost/scsi: potential memory corruption
|
||||
|
||||
This code in vhost_scsi_make_tpg() is confusing because we limit "tpgt"
|
||||
to UINT_MAX but the data type of "tpg->tport_tpgt" and that is a u16.
|
||||
|
||||
I looked at the context and it turns out that in
|
||||
vhost_scsi_set_endpoint(), "tpg->tport_tpgt" is used as an offset into
|
||||
the vs_tpg[] array which has VHOST_SCSI_MAX_TARGET (256) elements so
|
||||
anything higher than 255 then it is invalid. I have made that the limit
|
||||
now.
|
||||
|
||||
In vhost_scsi_send_evt() we mask away values higher than 255, but now
|
||||
that the limit has changed, we don't need the mask.
|
||||
|
||||
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
|
||||
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
|
||||
---
|
||||
drivers/vhost/scsi.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c
|
||||
index d695b1673ae5..f5c98e6f7b58 100644
|
||||
--- a/drivers/vhost/scsi.c
|
||||
+++ b/drivers/vhost/scsi.c
|
||||
@@ -1253,7 +1253,7 @@ tcm_vhost_send_evt(struct vhost_scsi *vs,
|
||||
* lun[4-7] need to be zero according to virtio-scsi spec.
|
||||
*/
|
||||
evt->event.lun[0] = 0x01;
|
||||
- evt->event.lun[1] = tpg->tport_tpgt & 0xFF;
|
||||
+ evt->event.lun[1] = tpg->tport_tpgt;
|
||||
if (lun->unpacked_lun >= 256)
|
||||
evt->event.lun[2] = lun->unpacked_lun >> 8 | 0x40 ;
|
||||
evt->event.lun[3] = lun->unpacked_lun & 0xFF;
|
||||
@@ -2124,12 +2124,12 @@ tcm_vhost_make_tpg(struct se_wwn *wwn,
|
||||
struct tcm_vhost_tport, tport_wwn);
|
||||
|
||||
struct tcm_vhost_tpg *tpg;
|
||||
- unsigned long tpgt;
|
||||
+ u16 tpgt;
|
||||
int ret;
|
||||
|
||||
if (strstr(name, "tpgt_") != name)
|
||||
return ERR_PTR(-EINVAL);
|
||||
- if (kstrtoul(name + 5, 10, &tpgt) || tpgt > UINT_MAX)
|
||||
+ if (kstrtou16(name + 5, 10, &tpgt) || tpgt > VHOST_SCSI_MAX_TARGET)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
tpg = kzalloc(sizeof(struct tcm_vhost_tpg), GFP_KERNEL);
|
|
@ -44,7 +44,7 @@ index 4ddaf66ea35f..00b440307419 100644
|
|||
}
|
||||
regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12);
|
||||
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
|
||||
index 4c58333b4257..fc9637812d78 100644
|
||||
index 297110c12635..efe38c1bc234 100644
|
||||
--- a/drivers/char/mem.c
|
||||
+++ b/drivers/char/mem.c
|
||||
@@ -27,6 +27,7 @@
|
||||
|
@ -53,9 +53,9 @@ index 4c58333b4257..fc9637812d78 100644
|
|||
#include <linux/aio.h>
|
||||
+#include <linux/module.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
@@ -571,6 +572,9 @@ static ssize_t write_port(struct file *file, const char __user *buf,
|
||||
@@ -577,6 +578,9 @@ static ssize_t write_port(struct file *file, const char __user *buf,
|
||||
unsigned long i = *ppos;
|
||||
const char __user *tmp = buf;
|
||||
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
From: Quentin Casasnovas <quentin.casasnovas@oracle.com>
|
||||
Date: Tue, 3 Feb 2015 13:00:22 +0100
|
||||
Subject: [PATCH] x86/microcode/intel: Guard against stack overflow in the
|
||||
loader
|
||||
|
||||
mc_saved_tmp is a static array allocated on the stack, we need to make
|
||||
sure mc_saved_count stays within its bounds, otherwise we're overflowing
|
||||
the stack in _save_mc(). A specially crafted microcode header could lead
|
||||
to a kernel crash or potentially kernel execution.
|
||||
|
||||
Signed-off-by: Quentin Casasnovas <quentin.casasnovas@oracle.com>
|
||||
Cc: "H. Peter Anvin" <hpa@zytor.com>
|
||||
Cc: Fenghua Yu <fenghua.yu@intel.com>
|
||||
Link: http://lkml.kernel.org/r/1422964824-22056-1-git-send-email-quentin.casasnovas@oracle.com
|
||||
Signed-off-by: Borislav Petkov <bp@suse.de>
|
||||
---
|
||||
arch/x86/kernel/cpu/microcode/intel_early.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/cpu/microcode/intel_early.c b/arch/x86/kernel/cpu/microcode/intel_early.c
|
||||
index ec9df6f9cd47..5e109a31f62b 100644
|
||||
--- a/arch/x86/kernel/cpu/microcode/intel_early.c
|
||||
+++ b/arch/x86/kernel/cpu/microcode/intel_early.c
|
||||
@@ -321,7 +321,7 @@ get_matching_model_microcode(int cpu, unsigned long start,
|
||||
unsigned int mc_saved_count = mc_saved_data->mc_saved_count;
|
||||
int i;
|
||||
|
||||
- while (leftover) {
|
||||
+ while (leftover && mc_saved_count < ARRAY_SIZE(mc_saved_tmp)) {
|
||||
mc_header = (struct microcode_header_intel *)ucode_ptr;
|
||||
|
||||
mc_size = get_totalsize(mc_header);
|
Loading…
Reference in New Issue