[Differential] [Request, 35 lines] D4301: Disable MSI-x for AHCI on Alpine plaftrorm

jpa-semihalf.com (Jakub Palider) phabric-noreply at FreeBSD.org
Sun Nov 29 22:42:52 UTC 2015


jpa-semihalf.com created this revision.
jpa-semihalf.com added reviewers: imp, andrew, zbb.
jpa-semihalf.com added a subscriber: freebsd-arm-list.

REVISION SUMMARY
  Changes introduced to AHCI code adding support for MSI-x caused interrupt storm on Alpine boards. This is unintended behaviour so added quirk to omit this functionality. This is a small and non-intrusive patch so I hope no problems will arise, anyway, have a look at this, please.

REVISION DETAIL
  https://reviews.freebsd.org/D4301

AFFECTED FILES
  sys/dev/ahci/ahci.h
  sys/dev/ahci/ahci_pci.c

CHANGE DETAILS
  diff --git a/sys/dev/ahci/ahci_pci.c b/sys/dev/ahci/ahci_pci.c
  --- a/sys/dev/ahci/ahci_pci.c
  +++ b/sys/dev/ahci/ahci_pci.c
  @@ -293,7 +293,7 @@
   	{0x11851039, 0x00, "SiS 968",		0},
   	{0x01861039, 0x00, "SiS 968",		0},
   	{0xa01c177d, 0x00, "ThunderX",		AHCI_Q_ABAR0|AHCI_Q_1MSI},
  -	{0x00311c36, 0x00, "Annapurna",		AHCI_Q_FORCE_PI|AHCI_Q_RESTORE_CAP},
  +	{0x00311c36, 0x00, "Annapurna",		AHCI_Q_FORCE_PI|AHCI_Q_RESTORE_CAP|AHCI_Q_NOMSIX},
   	{0x00000000, 0x00, NULL,		0}
   };
   
  @@ -437,6 +437,9 @@
   	    &ctlr->r_rid, RF_ACTIVE)))
   		return ENXIO;
   
  +	if (ctlr->quirks & AHCI_Q_NOMSIX)
  +		msix_count = 0;
  +
   	/* Read MSI-x BAR IDs if supported */
   	if (msix_count > 0) {
   		error = ahci_pci_read_msix_bars(dev, &table_bar, &pba_bar);
  diff --git a/sys/dev/ahci/ahci.h b/sys/dev/ahci/ahci.h
  --- a/sys/dev/ahci/ahci.h
  +++ b/sys/dev/ahci/ahci.h
  @@ -576,13 +576,14 @@
   #define AHCI_Q_NOCOUNT		0x00000400
   #define AHCI_Q_ALTSIG		0x00000800
   #define AHCI_Q_NOMSI		0x00001000
  -#define AHCI_Q_ATI_PMP_BUG	0x00002000
  -#define AHCI_Q_MAXIO_64K	0x00004000
  -#define AHCI_Q_SATA1_UNIT0	0x00008000	/* need better method for this */
  -#define AHCI_Q_ABAR0		0x00010000
  -#define AHCI_Q_1MSI		0x00020000
  -#define AHCI_Q_FORCE_PI		0x00040000
  -#define AHCI_Q_RESTORE_CAP	0x00080000
  +#define AHCI_Q_NOMSIX		0x00002000
  +#define AHCI_Q_ATI_PMP_BUG	0x00004000
  +#define AHCI_Q_MAXIO_64K	0x00008000
  +#define AHCI_Q_SATA1_UNIT0	0x00010000	/* need better method for this */
  +#define AHCI_Q_ABAR0		0x00020000
  +#define AHCI_Q_1MSI		0x00040000
  +#define AHCI_Q_FORCE_PI		0x00080000
  +#define AHCI_Q_RESTORE_CAP	0x00100000
   
   #define AHCI_Q_BIT_STRING	\
   	"\020"			\
  @@ -599,13 +600,14 @@
   	"\013NOCOUNT"		\
   	"\014ALTSIG"		\
   	"\015NOMSI"		\
  -	"\016ATI_PMP_BUG"	\
  -	"\017MAXIO_64K"		\
  -	"\020SATA1_UNIT0"	\
  -	"\021ABAR0"		\
  -	"\0221MSI"              \
  -	"\023FORCE_PI"          \
  -	"\024RESTORE_CAP"
  +	"\016NOMSIX"		\
  +	"\017ATI_PMP_BUG"	\
  +	"\018MAXIO_64K"		\
  +	"\019SATA1_UNIT0"	\
  +	"\020ABAR0"		\
  +	"\0211MSI"              \
  +	"\022FORCE_PI"          \
  +	"\023RESTORE_CAP"
   
   int ahci_attach(device_t dev);
   int ahci_detach(device_t dev);

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: jpa-semihalf.com, imp, andrew, zbb
Cc: freebsd-arm-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D4301.10542.patch
Type: text/x-patch
Size: 2103 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-arm/attachments/20151127/99459007/attachment.bin>


More information about the freebsd-arm mailing list