|
Bog BOS: hardware: PCI |
Последнее изменение файла: 2022.02.22
Скопировано с www.bog.pp.ru: 2024.11.03
Локальная шина PCI (бесприбыльная организация PCI-SIG, 1992 год) предназначена для обмена данными между контроллерами, платами расширения и процессором. Стандарт описывает протокол, электрические и механические характеристики (размеры плат, разъёмы), а также спецификацию пространства конфигурации. Не зависит от процессора и системной шины (требуется корневой мост). Ширина шины по данным - 32 или 64 бита (проверка чётности). Адресация - 32 или 64 бит (проверка чётности, не обязательна подержка шины данных 64 бит). Частота - 33 MHz (6 контроллеров на системной плате и 2 слота или 2 контроллера на системной плате и 4 слота) или 66 MHz (2 слота), одно медленное устройство замедляет всю шину. Задержка - 60 нс для 33 Мгц.
Одновременно действуют версии 2.3 (2001, наличие поддержки сигналов 5 В для TTL) и 3.0 (2002, отсутствие поддержки сигналов 5 В для TTL, только 3.3 В для CMOS). Для исключения смешения компонентов с неподходящим напряжением используется система ключей на материнской плате и плате расширения.
Разработчики PCI-X увеличили частоту до 66 MHz (4 слота), 133 MHz (266 MHz, 533 MHz) почти не меняя архитектуру системы (версия 2: сигналы 1.5V; 2 и 4 подфазы на такт, ECC, режим 16 бит).
PCI-SIG присваивает идентификаторы производителя (Vendor ID) и распространяет документацию среди своих членов, членство платное.
К шине PCI устройства PCI (контроллеры, агенты) подключены с помощью параллельного физического интерфейса с мультиплексированием адресов и данных, используется синхронная передача. Шина PCI (или сегмент, см. ниже) подключается к системной шине корневым мостом (PCI Root Bridge, Host Bridge). Корневой мост (это тоже PCI устройство) имеет первичную системную шину (primary, upstream) и вторичную шину PCI (secondary, downstream). Через корневой мост устройства PCI непосредственно доступны в едином адресном пространстве памяти (MMIO) и IO портов. На шине может быть до 32 устройств (до 16 за мостом?). Устройство может реализовывать до 8 функций, функция 0 обязательна, номера не обязаны быть непрерывными. Шины PCI могут соединяться с помощью мостов PCI to PCI (PCI-to-PCI, P2P Bridge) в сегмент PCI (топология - иерархия, дерево) для преодоления лимита на количество устройств на шине, до 256 шин. Корневых мостов может быть несколько, через них может быть подключено несколько сегментов PCI или общий сегмент с общим конфигурационным пространством. Корневой мост не описывается в стандарте, поэтому все корневые мосты должны инициализироваться прошивкой и описаны в ACPI (_HID, _CID, _CRS, _PRT, _BBN и пр.). PCI устройства типа мастер (Master) имеют прямой доступ к памяти системы через корневой мост (он же арбитр для PCI шины и центральный ресурс).
Логический набор шин PCI или сегментов PCI с 1 или несколькими хостовыми мостами образует домен PCI (Segment Group?). Использование нескольких доменов позволяет повторно использовать номера шин PCI.
Устройства PCI работают с 3 физическими адресными пространствами: адресное пространство памяти (MMIO), адресное пространство портов ввода-вывода (IO) и адресное пространство конфигурации устройства (256 байт на функцию, little endian), которое используется для инициализации устройства и обработки ошибок. Первоначально было определено 2 метода (типа) конфигурации, но остался только первый.
Доступ к адресному пространству конфигурации осуществляется с помощью специальной команды шины PCI (см. ниже) с явным указанием сигнала для нужного устройства, механизм выдачи команды описан только для архитектуры PC AT (через корневой мост): порт ввода-вывода CF8h для адреса конфигурации (шина, устройство, функция, смещение (номер регистра конфигурации)) и CFCh для данных конфигурации. Пространство конфигурации делится на стандартную (predefined header region) и нестандартную части (device dependent region). Чтение из пространства конфигурации несуществующего устройства возвращает все '1', что позволяет обойти (пронумеровать) все PCI агенты (контроллеры). Запись в пространство конфигурации по зарезервированному адресу уходит в никуда, чтение возвращает 0.
Первые 16 байт стандартной части одинаковы для всех типов заголовков устройств
Стандартные поля для заголовка типа 0:
PCI протокол не описывает доступ к хранилищу на плате, только к копии в памяти (RomImage, RomSize). PCI Expansion ROM (Option ROM, EPROM) не должен быть более 16 МБ, может содержать несколько образов Legacy BIOS (первым) и/или EFI (PCI Expansion ROM и PE/COFF)) для нескольких архитектур. Каждый образ начинается на границе блока 512 байт и начинается с заголовка Expansion ROM, который включает признак начала заголовка (байты 0x55, 0xAA), архитектурное расширение и ссылку в этом же регионе (16 бит) на структуру PCI Data. Архитектурное расширение для PC-AT содержит размер кода инициализации (в блоках по 512 байт) и ссылку на адрес кода инициализации (3 байта). PCI Data содержит: признак начала ("PCIR"), идентификатор поставщика, идентификатор устройства, раньше был указатель на Vital Product Data (устарело), версия формата PCI Data (0), класс устройства (см. выше), размер образа (в блоках по 512 байт, 16 бит), версия кода в образе (Revision Level), тип кода (0 - x86 PC-AT, 1 - Open Firmware IEEE 1275-1994, 2 - HP PA RISC, 3 - EFI), индикатор последнего образа в списке. POST первоначально проверяет наличие регистра базового адреса расширения ROM и отображает ROM в адресное пространство, затем ищет среди образов образ с нужным типом кода и для нужного идентификатора поставщика и идентификатора устройства и (для архитектуры x86 PC-AT) копирует код инициализации в память (0C0000h-0DFFFFh?), устанавливает регистр базового адреса расширения ROM в память (Expansion ROM в lspci показывает размер и адрес в памяти), выделяет ресурсы (заполняет регистры базового адреса и прерывания), затем запускает код инициализации устройства (для архитектуры x86 PC-AT делается FAR CALL на указатель на код инициализации в памяти, параметры: номер шины, номер устройства, номер функции). Код инициализации может изменять себя и свой размер (даже до нуля) в заголовке Expansion ROM для уменьшения потребности в дефицитном адресном пространстве нижней части памяти во время выполнения. Кроме стандартного заголовка может содержать заголовки расширения, например, для загрузчика IPL.
Пакет flashrom позволяет искать, читать и писать прошивку для поддерживаемых материнских плат, сетевых карт, SATA и прочих. Например, сетевая карта Intel 82599 10-Gigabit SFI/SFP+ Network Controller (X520-2):
flashrom --programmer nicintel_spi This PCI device is UNTESTED This PCI device is UNTESTED Error: Multiple supported PCI devices found. Use 'flashrom -p xxxx:pci=bb:dd.f' flashrom --programmer nicintel_spi:pci=04:00.0 -V Found "Intel 82599 10-Gigabit SFI/SFP+ Network Controller" (8086:10fb, BDF 04:00.0) This PCI device is UNTESTED Found Micron/Numonyx/ST flash chip "M25P40" (512 kB, SPI) on nicintel_spi flashrom --programmer nicintel_spi:pci=04:00.0 -V -r Intel82599.rom -o Intel82599.backup.log file Intel82599.rom Intel82599.rom: BIOS (ia32) ROM Ext. (32*512) # UNDI PXE 2.1 и/или Setup? /usr/bin/EfiRom --dump Intel82599.rom # из edk2-tools (edk2-tools-docs) Image 1 -- Offset 0x0 ROM header contents Signature 0xAA55 PCIR offset 0x0040 Signature PCIR Vendor ID 0x8086 Device ID 0x10FB Length 0x001C Revision 0x0003 DeviceListOffset 0x339E Class Code 0x020000 Image size 0xF000 Code revision: 0x0201 MaxRuntimeImageLength 0x08 ConfigUtilityCodeHeaderOffset 0x00 DMTFCLPEntryPointOffset 0x00 Indicator 0x80 (last image) Code type 0x00
Шины PCI могут соединяться с помощью мостов PCI to PCI (PCI-to-PCI, P2P Bridge) в сегмент PCI (топология - иерархия, дерево) для преодоления лимита на количество устройств на шине, до 256 шин. Задача моста - обеспечить выполнение транзакции, затребованной мастером на исходной шине (originating bus), исполнителем на шине назначения (destination bus), мост играет исполнителем на исходной шине от имени реального исполнителя и мастером на шине назначения от имени реального мастера. Мост P2P имеет первичную шину PCI (primary, upstream) и вторичную шину PCI (secondary, downstream), мастер и исполнитель могут находиться как на первичной, так и на вторичной шине. Мост имеет свои регистры конфигурации только на первичной шине (на вторичной шине не реализована обработка сигнала выбора устройства IDSEL), RST на вторичной шине тоже не действует. Явно запрещается подключать 2 различные первичные шины к общей вторичной, иметь несколько мостов между одной и той же первичной и одной и той же вторичной шиной, делать циклы (первичный интерфейс одного моста подключается к вторичному интерфейсу второго моста и наоборот). Не передаются транзакции специального цикла (широковещательные). Единое адресное пространство конфигурации делится между всеми устройствами сегмента, каждому устройству соответствует уникальный интервал адресов портов и памяти, При инициализации обеспечивается общая нумерация шин сегмента. Возможности моста P2P по буферизации передачи определяются реализацией. Мост P2P может поддерживать функции горячего подключения. При расположении первичного загрузочного ROM на вторичном интерфейсе необходимо понимать, что мост должен кто-то предварительно сконфигурировать.
Стандартные поля для заголовка типа 1 (мост PCI-to-PCI):
Передачи по шине идут пачками (транзакциями) - сначала передаётся адрес, затем идёт 1 или несколько кадров передачи данных. Мастер задаёт команду управления шиной в начале транзакции, потенциальные исполнителю сравнивают адрес памяти иили порта в команде со своими и при совпадении взводят сигнал DEVSEL, команды:
Необходимый минимум контактов (ещё есть 2 контакта PRSNT - физическое наличие платы расширения в слоте и требования по питанию - 0, 7.5 Вт, 15 Вт, 25 Вт) - 47 (49 для мастера):
Дополнительные сигналы:
Прерывания INT[A-D] асинхронные, по одному прерыванию на функцию (устройство с 1 функцией может только INTA). Многофункциональные устройства могут иметь таблицу отображения между функцией и набором INTx, несколько функций могут отображаться на один и тот же INTx. Таблица отображения комбинации INTx на номер прерывания лежит на совести разработчика, номер прерывания выделяется функции во время POST (Interupt Line и Interupt Pin). Одно прерывание может обслуживать несколько устройств.
MSI (Message Signaled Interrupts) - возможность запросить обслуживание системы записав указанные системой данные по указанному системой адресу (данные и адрес - вектор). При инициализации системы каждой функции назначется 1 или несолько (до 32) векторов. Каждый вектор может быть маскирован отдельно (Mask and Pending). Описывается структурой возможностей (05h): управление (включить, 64-битные адреса, возможность маскирования, количество запрашиваемых и выделенных векторов - степень 2), адрес вектора, данные вектора, биты маски и ожиданий. Если функции выделено несколько векторов, то нужный вектор задаётся модификацией младших бит данных вектора. Если сообщение вызвано снова до обработки сообщения с тем же вектором, то оно может потеряться - используйте много векторов. spurious прерывание - были взведены биты маски и ожидания, сервис был обслужен, но бит ожидания не был очищен перед сбросом маски.
MSI-X - расширение MSI - позволяет больше (до 2048) векторов на функцию (например, Intel X520-2 (82599ES 10Gb) - 64 вектора, а Intel XL710 - 129), адреса задаются таблицей векторов в памяти (младшая часть адреса, данные, маска и ожидания), адреса всегда 64-битные, всегда есть маскирование. Функция может поддерживать как MSI так и MSI-X, но нельзя использовать одновременно (и одновременно с INTx). Описывается отдельной структурой возможностей (11h): управление (включить, размер таблицы), старшая часть 64-битного адреса вектора, BIR (BAR Indicator register) - адрес регистра базового адреса для таблицы (обязательно память), смещение таблицы относительно регистра.
PCI BIOS 2.1 описывает программный интерфейс (во всех режимах: реальный и virtual-86 и защищённый 16:16 (286) через прерывание 1Ah, защищённый 16:32 (386) и 0:32 (плоский) через BIOS32 Service Directory) с функцией B1h для работы с ресурсами шины PCI. Реентерабельна, прерывания не используются и не меняются, требуются права на работу с портами ввода-вывода, является частью BIOS, не умеет MSI и MSI-X, работает только с группой сегментов (доменом) 0. BIOS32 Service Directory описывается заголовком в интервале от 0E0000h до 0FFFF0h с сигнатурой '_32_', указывается 32-битный физический адрес, версия каталога, размер и контрольная сумма (до 0). По указанному адресу находится программа, которая возвращает физический адрес и смещение требуемого сервиса (в данном случае сервис '$PCI'). Возможности: какая версия сервиса поддерживается, номер последней шины PCI, поиск устройства по идентификатору изготовителя и идентификатору устройства и индекс (возвращаются номер шины, номер устройства и номер функции), поиск устройства по классу (все 3 байта) и индексу (возвращаются номер шины, номер устройства и номер функции), специальный цикл (широковещательная рассылка по указанной шине), получить таблицу возможных прерываний IRQ для каждого INTx каждого устройства (также номер слота, кто с кем связан, битовая карта IRQ, назначенных PCI исключительно), назначить IRQ указанному INTx указанного устройства, чтение и запись байт, слов и двойных слов конфигурационного пространства.
PCI Firmware Specification 3.2 обновляет описание программного интерфейса PCI BIOS и распространяет сервис на PCI Express (расширенное пространство конфигурации), EFI и ACPI. Также описывает формат Expansion ROM (Option ROM).
Встроенный (необязательный) SMBus 2.0 (System Management Bus (SMBus) Specification 2.0, последовательный интерфейс по 2 проводам - SMBCLK и SMBDAT) позволяет опрашивать и управлять устройством, опрашивать датчики. Похож на I2C, но не совпадает. Может работать от 3.3Vaux при переводе системы в режим низкого потребления. Физическая шина SMBus - прямые соединения без использования повторителей и мостов. Логическая шина SMBus - объединение физических шин SMBus с помощью повторителей, обеспечивает общее адресное пространство и единый домен арбитража. Материнская плата предоставляет контроллер шины с механизмом арбитрации multi-master и возможности как мастера так и подчинённого. Все PCI устройства в одном шасси должны представлять 1 логическую шину SMBus. Адреса подчинённых устройств на картах расширения назначаются с помощью протокола ARP (address resolution protocol), реализация обязательна. Адреса устройств на материнской плате могут быть постоянными. SMBus на карте расширения должна предоставлять возможности подчинённого устройства.
Линии питания (ещё есть несколько линий земли и резерв): +5В (5A, 8 штук), +3.3В (7.6A, до 23 штук), +12В (500 ma) и -12В (100 mA) и опционально 3.3Vaux (требуется поддержка управления питанием). Карта расширения не должна потреблять более 25 Вт по всем линиям (10 Вт в неинициализированном состоянии).
Гнездо на материнской плате имеет ключ в позициях 12 и 13 для версии с обработкой сигналов 3.3 В и ключ в позициях 50 и 51 для версии с обработкой сигналов 5 В. Соединитель платы расширения имеет вырез для ключа 3.3 В или для обоих (Dual Voltage). Часть контактов для 64-битных команд (AD, C/BE, PAR64) отделены от основной части соединителя промежутком между позициями 62 и 63 (REQ64 и ACK64 расположены на первой (32-битной) части соединителя). Всего 62 двусторонних контакта (94 для 64-битной версии), из них 2 изоасходованы под ключ.
Механически платы расширения делятся на длинные (312 мм или 340.74 с корпусом, высота до 106.68 мм), короткие (длина до 167.64 мм), низкопрофильные (высота до 64.41 мм; длина MD1 - 121.79 мм , MD2 - 169.92 мм, MD3 - 243.18 мм). Толщина - 14.71 мм без учёта заднего монтажа, передняя панель - 17.15, компоненты на передней стороне - 14.48 мм, компоненты на задней стороне - 2.67 мм, интервал между картами - 20.32 мм. Контакты должны быть покрыты золотом поверх никеля или позолочены поверх палладиума и никеля и выдерживать более 100 циклов. Также стандартизованы разъёмы переходников (riser card). Имеется отдельный стандарт Mini PCI.
В протоколе прямо заявляется о возможности дедлоков (3.10.5) и чтения "зачерствевших" данных (3.10.6). Шина PCI не является устойчивой к отказам устройств. Шина PCI не предназначена к обработки ситуаций неожиданного извлечения устройств, для горячего подключения необходимо использовать специальные процедуры.
Состояния питания функции - D0 (нормальная работа), D1 (разрешается инициировать только PME, отвечать только на запросы к конфигурационному пространству), D2 (разрешается инициировать только PME, отвечать только на запросы к конфигурационному пространству, для перехода в D0 требуется не менее 200 мкс), D3hot (логическое отключение, имеется Vcc, отвечать только на запросы к конфигурационному пространству, можно вернуться в D0 записью в регистр PMCSR (возможен внутренний сброс - No_Soft_Reset=0), не менее 10 мс) и D3cold (физическое отключение, отсутствует Vcc, можно перейти в D0 подачей питания и сигнала RST, но в неинициализированное состояние). D0 делится на неинициализированное состояние (переход из D3cold подачей питания) и активное. Следует учесть, что каждая функция имеет свои настройки управления питанием, но все функции одного устройства разделяют общую нагрузку на шину. Для каждого класса устройств должна быть определена своя политика (потребляемая мощность, задержки, урезание возможностей) для различных состояний. Стандарт определяет политику только для мостов. Управление питанием фукции осуществляется с помощью возможности 1, регистры управления питанием:
Состояния питания шины - B0 (полная работоспособность), B1 (тактовая частота есть, только PME), B2 (питание есть, остановить тактовый генератор, только PME, требуется 50 мс для перехода в B0), B3 (отключить питание, только PME, отсюда только в B0, при возвращении питания выдаётся сигнал RST). Отключение питания переводит шину в B3, сигнал RST переводит шину в B0, для перевода в B1 и B2 (и B3) требуется перевести исходящее устройство (Originating Device - мост, для которого эта шина является вторичной) в D1 или D2 (и D3hot).
Для каждого сочетания состояний D и B определяется: сохраняемый контекст, потребление, задержка доступа к функции, время восстановления до активного D0, доступные функции действия на шине PCI, доступные действия с функцией как исполнителем.
Сигнал PME (контакт 19A) - необязательный, асинхронный, выходной для функции (PME_En).
Устройство (все функции) имеет право потреблять не более 375 мА из 3.3Vaux при выдаче сигнала PME из D3cold, и не более 10 мА (20 mA?) при запрете выдачи. Суммарное потребление из 3.3Vaux по всей шине в B3 должно быть не менее 375 мА на выдающее в данный момент сигнал PME и по 20 мА на остальные слоты. В режимах B0/B1/B2 необходимо обеспечить все слоты 375 мА с шины питания 3.3Vaux (т.е. на 4 слота - 1.5A).
Горячее подключение описываетс 2 стандартами: "PCI Hot-Plug Specification" (серверная платформа) и "PCI Standard Hot-Plug Controller and Subsystem Specification" (SHPC, специальный контроллер, управляющий подачей питания и сигналов на 1 слот горячего подключения, платформа может содержать несколько контроллеров). Слот имеет логический номер (либо номер шасси и физический номер слота, либо номер шины PCI и номер устройства. Шина PCI не предназначена к обработки ситуаций неожиданного извлечения устройств, для горячего подключения необходимо извещать ОС, которая останавливает активность устройства (блокирует приём новых запросов, завершает или прерывает имеющиеся запросы, блокирует генерацию прерываний и мастерство на шине), подготавливает отключение с использование драйвера SPHC и извещает пользователя о готовности. Перед подсоединением карты расширения также необходимо известить ОС, которая должна отключить питание слота, после подсоединения карты пользователь извещает ОС, которая с помощью драйвера SHPC подаёт питание на слот и подключает его к шине, инициализирует устройство и извещает пользователя о готовности.
Необходимо гарантированное отключение питания слота, включая 3.3Vaux, перед вставкой или извлечением карты расширения даже в выключенной системе без ОС и изоляция сигналов слота, включая PME и SMBus, в момент вставки и извлечения. Необходим отдельный сигнал RST для платы, используемый в момент вставки и извлечения Контакты PRSNT/PCIXCAP (физическое наличие платы расширения в слоте) должны быть доступны для ПО независимо от наличия питания и изоляции сигналов. Доступность частоты 66 MHz должна быть определима и при изоляции сигналов. Платформа должна быть готова к взаимодействию с ОС, ничего не знающей о горячем подключении. Стандарт не определяет, что делать с Option ROM: запускать его на исполнение (а как это сделать после завершения загрузки?) или использовать код драйвера.
Горячее подключение моста ведёт к перенумерации номеров шин сегмента и необходимости перераспределять другие ресурсы (порты ввода-вывода, память, прерывания). Рекомендуется зарезервировать немного ресурсов при инициализации системы, чтобы было что распределять при горячем подключении, не отнимая у других. Результат распределения записывается в ACPI (_HPP и OSHP - Operating System Hot Plug) или HPRT (hot-plug resource table, "$HST").
Каждый слот горячего подключения должен иметь индикаторы привлечения внимания (Attention) и активности (on, опционально), управляемые SHPC. Стандартная модель использования SHPC (Standard Usage Model) предполагает также наличие кнопки для каждого слота, позволяющей оператору известить ОС о его желании вставить или извлечь плату расширения, а также датчика наличия платы расширения в слоте (MRL - manually operated retention latch - Sensor). Возможна также электромеханическая блокировка извлечения платы расширения из слота под напряжением. SHPC д.б. реализован в рамках моста (хостового или P2P) для управления слотами вторичной шины. Программный интерфейс состоит из списка возможностей типа 0Ch и рабочих регистров.
При реализации SHPC в рамках моста PCI-to-PCI список возможностей 0Ch позволяет выбрать (DWORD Select) и получить доступ (DWORD Data) к одному из рабочих регистров: базовое смещение SHPC к базовому адресу памяти моста для доступа к рабочим регистрам (рекурсия, однако!), количество доступных слотов при различных режимах и частотах, конфигурация слотов (задаёт соответствие между логическим номером слота - номер PCI устройства - и физическим; количество управляемых слотов, номер первого устройства PCI, физический номер первого слота, направление физической нумерации), наличие датчика MLR, наличие кнопки, режим и частота вторичной шины, номер MSI, интерфейс программирования (1), управление (код команды, номер слота), состояние (код ошибки выполнения команды), какой слот ждёт прерывания (бит на каждый слот), какой слот вызвал SERR (бит на каждый слот), разрешение прерываний (общий, SERR, завершение команды, арбитр), логический слот1 (занят, питание, индикатор внимания, сбой питания, нажата кнопка, датчик MLR, умеет 66 MHz, потребность питания, умеет PCI-X, события, маска прерываний), ..., логический слот 31. Команды позволяют: включить слот, выключить слот, включить питание слота, включить или выключить индикатор питания, помигать им, включить или выключить индикатор внимания, помигать им, установить режим и скорость всей вторичной шины (и сброс), подать питание на все слоты, включить все слоты. Рабочие регистры доступны также через отображение в память (только сначала надо базовое смещение к базовому адресу извлечь через список возможностей). Бит CSP в списке возможностей указывает на наличие значений в указателе SERR, бит CIP указывает на наличие значений в указателе прерываний. Для обработки событий может быть использовано системное прерывание (INTx, MSI, MSI-X) или сигнал WAKE (аналог PME для хостового моста).
При реализации SHPC в рамках хостового моста рабочие регистры SHPC включены в HBRB - Host Bridge Register Block (хостовый мост не стандартизован, но см. ACPI _HID "PNP0A07" и _CID "PNP0A03"). Содержит номер шины, слотами которой управляет SHPC, и сами рабочие регистры SHPC (см. выше).
Универсальные методы работы с PCI/PCI-Express устройствами описаны в Documentation/ABI/testing/sysfs-bus-pci.
Сброс устройства без перезагрузки (в данном случае Fibre Channel to PCI Express HBA от QLogic, драйвер qla2xxx):
echo 1 > /sys/bus/pci/devices/0000:02:00.0/host6/reset Jan 13 04:54:31 s87 kernel: qla2xxx [0000:02:00.0]-d001:6: Firmware dump saved to temp buffer (6/ffffc90016fcb000), dump status flags (0x3f). Jan 13 04:54:31 s87 kernel: qla2xxx [0000:02:00.0]-101e:6: Mailbox cmd timeout occurred, cmd=0x54, mb[0]=0x54. Scheduling ISP abort Jan 13 04:54:31 s87 kernel: qla2xxx [0000:02:00.0]-00af:6: Performing ISP error recovery - ha=ffff880c6644d000. Jan 13 04:54:35 s87 kernel: qla2xxx [0000:02:00.0]-500a:6: LOOP UP detected (8 Gbps). Jan 13 04:54:35 s87 kernel: qla2xxx [0000:02:00.0]-801c:6: Abort command issued nexus=6:0:1 -- 0 2002. Jan 13 04:54:37 s87 kernel: qla2xxx [0000:02:00.0]-8009:6: DEVICE RESET ISSUED nexus=6:0:0 cmd=ffff880658703ec0. Jan 13 04:54:37 s87 kernel: qla2xxx [0000:02:00.0]-800e:6: DEVICE RESET SUCCEEDED nexus:6:0:0 cmd=ffff880658703ec0. Jan 13 04:54:37 s87 kernel: qla2xxx [0000:02:00.0]-8009:6: DEVICE RESET ISSUED nexus=6:0:1 cmd=ffff880c627a8280. Jan 13 04:54:37 s87 kernel: qla2xxx [0000:02:00.0]-800e:6: DEVICE RESET SUCCEEDED nexus:6:0:1 cmd=ffff880c627a8280.
Оживление зависшего устройства (в данном случае MegaRAID 9266 от LSI/Avago/Broadcom/как-его-там-сегодня-зовут, подвисшее устройство:
lspci -vvv -s 06:00.0 pcilib: sysfs_read_vpd: read failed: Connection timed out попробовал sg_ses и smartctl -i Jan 13 05:44:53 x142 kernel: megasas: Found FW in FAULT state, will reset adapter scsi9. Jan 13 05:44:53 x142 kernel: megaraid_sas: resetting fusion adapter scsi9. Jan 13 05:44:53 x142 kernel: megaraid_sas: Reset not supported, killing adapter scsi9. Jan 13 05:44:54 x142 kernel: ses 9:0:8:0: Device offlined - not ready after error recovery Jan 13 05:44:54 x142 kernel: ses 9:0:8:0: Device offlined - not ready after error recovery Jan 13 05:44:54 x142 kernel: ses 9:0:9:0: Device offlined - not ready after error recovery Jan 13 05:51:46 x142 kernel: Controller in crit error
Удаление устройства и повторное сканирование шины:
echo 3 > /proc/sys/vm/drop_caches # освободить память для драйвера echo 1 > /sys/bus/pci/devices/0000:06:00.0/remove ls -lL /sys/bus/pci/devices/0000:06:00.0 ls: cannot access /sys/bus/pci/devices/0000:06:00.0: No such file or directory echo 1 > /sys/bus/pci/rescan Jan 13 06:08:21 x142 kernel: pci 0000:06:00.0: BAR 3: assigned [mem 0xdfa00000-0xdfa3ffff 64bit] Jan 13 06:08:21 x142 kernel: pci 0000:06:00.0: BAR 6: assigned [mem 0xdfa40000-0xdfa5ffff pref] Jan 13 06:08:21 x142 kernel: pci 0000:06:00.0: BAR 1: assigned [mem 0xdfa60000-0xdfa63fff 64bit] Jan 13 06:08:21 x142 kernel: pci 0000:06:00.0: BAR 0: assigned [io 0x5000-0x50ff] Jan 13 06:08:21 x142 kernel: mgag200 0000:08:03.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment Jan 13 06:08:21 x142 kernel: megasas: Waiting for FW to come to ready state Jan 13 06:08:21 x142 kernel: megasas: FW now in Ready state Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: firmware supports msix#011: (16) Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: current msix/online cpus#011: (12/12) Jan 13 06:08:21 x142 kernel: megasas:IOC Init cmd success Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: firmware type#011: Extended VD(240 VD)firmware Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: controller type#011: MR(1024MB) Jan 13 06:08:21 x142 kernel: megasas: INIT adapter done Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: pci id#011#011: (0x1000)/(0x005b)/(0x1000)/(0x9266) Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: unevenspan support#011: no Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: disable ocr#011#011: no Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: firmware crash dump#011: no Jan 13 06:08:21 x142 kernel: megaraid_sas 0000:06:00.0: secure jbod#011#011: no Jan 13 06:08:21 x142 kernel: scsi host10: Avago SAS based MegaRAID driver Jan 13 06:08:21 x142 kernel: scsi 10:0:8:0: Enclosure LSI SAS3x40 0601 PQ: 0 ANSI: 5 Jan 13 06:08:21 x142 kernel: scsi 10:0:9:0: Enclosure LSI SAS3x40 0601 PQ: 0 ANSI: 5 Jan 13 06:08:21 x142 kernel: ses 10:0:8:0: Attached Enclosure device Jan 13 06:08:21 x142 kernel: ses 10:0:8:0: Attached scsi generic sg5 type 13 Jan 13 06:08:21 x142 kernel: ses 10:0:9:0: Attached Enclosure device Jan 13 06:08:21 x142 kernel: ses 10:0:9:0: Attached scsi generic sg6 type 13
Натравить драйвер на устройство явным заданием адреса:
echo 0000:06:00.0 > /sys/bus/pci/drivers/megaraid_sas/bind
|
Bog BOS: hardware: PCI |