/***************************************************************************** * * Copyright (C) 2008 Cedric Bregardis and * Jean-Christian Hassler * * This file is part of the Audiowerk2 ALSA driver * * The Audiowerk2 ALSA driver is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2. * * The Audiowerk2 ALSA driver is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the Audiowerk2 ALSA driver; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * *****************************************************************************/ /* SAA7146 registers */ #define PCI_BT_A 0x4C #define IICTFR 0x8C #define IICSTA 0x90 #define BaseA1_in 0x94 #define ProtA1_in 0x98 #define PageA1_in 0x9C #define BaseA1_out 0xA0 #define ProtA1_out 0xA4 #define PageA1_out 0xA8 #define BaseA2_in 0xAC #define ProtA2_in 0xB0 #define PageA2_in 0xB4 #define BaseA2_out 0xB8 #define ProtA2_out 0xBC #define PageA2_out 0xC0 #define IER 0xDC #define GPIO_CTRL 0xE0 #define ACON1 0xF4 #define ACON2 0xF8 #define MC1 0xFC #define MC2 0x100 #define ISR 0x10C #define PSR 0x110 #define SSR 0x114 #define PCI_ADP1 0x12C #define PCI_ADP2 0x130 #define PCI_ADP3 0x134 #define PCI_ADP4 0x138 #define LEVEL_REP 0x140 #define FB_BUFFER1 0x144 #define FB_BUFFER2 0x148 #define TSL1 0x180 #define TSL2 0x1C0 #define ME (1UL << 11) #define LIMIT (1UL << 4) #define PV (1UL << 3) /* PSR/ISR/IER */ #define PPEF (1UL << 31) #define PABO (1UL << 30) #define IIC_S (1UL << 17) #define IIC_E (1UL << 16) #define A2_in (1UL << 15) #define A2_out (1UL << 14) #define A1_in (1UL << 13) #define A1_out (1UL << 12) #define AFOU (1UL << 11) #define PIN3 (1UL << 6) #define PIN2 (1UL << 5) #define PIN1 (1UL << 4) #define PIN0 (1UL << 3) #define ECS (1UL << 2) #define EC3S (1UL << 1) #define EC0S (1UL << 0) /* SSR */ #define PRQ (1UL << 31) #define PMA (1UL << 30) #define IIC_EA (1UL << 21) #define IIC_EW (1UL << 20) #define IIC_ER (1UL << 19) #define IIC_EL (1UL << 18) #define IIC_EF (1UL << 17) #define AF2_in (1UL << 10) #define AF2_out (1UL << 9) #define AF1_in (1UL << 8) #define AF1_out (1UL << 7) #define EC5S (1UL << 3) #define EC4S (1UL << 2) #define EC2S (1UL << 1) #define EC1S (1UL << 0) /* PCI_BT_A */ #define BurstA1_in (1UL << 26) #define ThreshA1_in (1UL << 24) #define BurstA1_out (1UL << 18) #define ThreshA1_out (1UL << 16) #define BurstA2_in (1UL << 10) #define ThreshA2_in (1UL << 8) #define BurstA2_out (1UL << 2) #define ThreshA2_out (1UL << 0) /* MC1 */ #define MRST_N (1UL << 15) #define EAP (1UL << 9) #define EI2C (1UL << 8) #define TR_E_A2_OUT (1UL << 3) #define TR_E_A2_IN (1UL << 2) #define TR_E_A1_OUT (1UL << 1) #define TR_E_A1_IN (1UL << 0) /* MC2 */ #define UPLD_IIC (1UL << 0) /* ACON1 */ #define AUDIO_MODE (1UL << 29) #define MAXLEVEL (1UL << 22) #define A1_SWAP (1UL << 21) #define A2_SWAP (1UL << 20) #define WS0_CTRL (1UL << 18) #define WS0_SYNC (1UL << 16) #define WS1_CTRL (1UL << 14) #define WS1_SYNC (1UL << 12) #define WS2_CTRL (1UL << 10) #define WS2_SYNC (1UL << 8) #define WS3_CTRL (1UL << 6) #define WS3_SYNC (1UL << 4) #define WS4_CTRL (1UL << 2) #define WS4_SYNC (1UL << 0) /* ACON2 */ #define A1_CLKSRC (1UL << 27) #define A2_CLKSRC (1UL << 22) #define INVERT_BCLK1 (1UL << 21) #define INVERT_BCLK2 (1UL << 20) #define BCLK1_OEN (1UL << 19) #define BCLK2_OEN (1UL << 18) /* IICSTA */ #define IICCC (1UL << 8) #define ABORT (1UL << 7) #define SPERR (1UL << 6) #define APERR (1UL << 5) #define DTERR (1UL << 4) #define DRERR (1UL << 3) #define AL (1UL << 2) #define ERR (1UL << 1) #define BUSY (1UL << 0) /* IICTFR */ #define BYTE2 (1UL << 24) #define BYTE1 (1UL << 16) #define BYTE0 (1UL << 8) #define ATRR2 (1UL << 6) #define ATRR1 (1UL << 4) #define ATRR0 (1UL << 2) #define ERR (1UL << 1) #define BUSY (1UL << 0) #define START 3 #define CONT 2 #define STOP 1 #define NOP 0 >
authorBjorn Helgaas <bhelgaas@google.com>2017-01-27 15:00:45 -0600
committerBjorn Helgaas <bhelgaas@google.com>2017-01-27 15:00:45 -0600
commit030305d69fc6963c16003f50d7e8d74b02d0a143 (patch)
tree363a4e34d199178769b7e7eeb26ea2620a55847b /net/sunrpc/svcauth.c
parent4d191b1b63c209e37bf27938ef365244d3c41084 (diff)
PCI/ASPM: Handle PCI-to-PCIe bridges as roots of PCIe hierarchies
In a struct pcie_link_state, link->root points to the pcie_link_state of the root of the PCIe hierarchy. For the topmost link, this points to itself (link->root = link). For others, we copy the pointer from the parent (link->root = link->parent->root). Previously we recognized that Root Ports originated PCIe hierarchies, but we treated PCI/PCI-X to PCIe Bridges as being in the middle of the hierarchy, and when we tried to copy the pointer from link->parent->root, there was no parent, and we dereferenced a NULL pointer: BUG: unable to handle kernel NULL pointer dereference at 0000000000000090 IP: [<ffffffff9e424350>] pcie_aspm_init_link_state+0x170/0x820 Recognize that PCI/PCI-X to PCIe Bridges originate PCIe hierarchies just like Root Ports do, so link->root for these devices should also point to itself. Fixes: 51ebfc92b72b ("PCI: Enumerate switches below PCI-to-PCIe bridges") Link: https://bugzilla.kernel.org/show_bug.cgi?id=193411 Link: https://bugzilla.opensuse.org/show_bug.cgi?id=1022181 Tested-by: lists@ssl-mail.com Tested-by: Jayachandran C. <jnair@caviumnetworks.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> CC: stable@vger.kernel.org # v4.2+
Diffstat (limited to 'net/sunrpc/svcauth.c')