PCI и PCI-X

Контроль достоверности передачи и обработка ошибок

Для контроля достоверности передачи информации на шине PCI применяется проверка четности адреса и данных; в PCI-X используется и ECC-контроль с исправлением однобитных ошибок. ECC-контроль обязателен при работе в Mode 2, он может использоваться и при работе в Mode 1. Метод контроля достоверности сообщается мостом в шаблоне инициализации по окончании аппаратного сброса шины. Мост выбирает тот метод контроля, который поддерживают все абоненты его вторичной шины (и он сам). Для сообщения об ошибках служат сигналы PERR# (протокольная сигнализация между устройствами) и SERR# (сигнал фатальной ошибки, вызывающий, как правило, немаскируемое прерывание системы).

При контроле четности используются сигналы PAR и PAR64, обеспечивающие четность числа «единиц» на наборах линий AD[31:0], C/BE[3:0]#, PAR и AD[63:32], C/BE[7:4]#, PAR64. Сигналы четности PAR и PAR64 вырабатываются тем устройством, которое в данный момент управляет шиной AD (выводит команду и адрес, атрибуты или данные). Сигналы четности в режиме PCI вырабатываются с задержкой на один такт относительно контролируемых ими линий AD и C/BE#. В PCI-X при операциях чтения правила немного иные: биты четности в такте N относятся к битам данных такта N – 1 и сигналам C/BE# такта N – 2. Сигналы PERR# и SERR# вырабатываются приемником информации в такте, следующем за тактом, в котором нарушено условие четности.

При ECC-контроле в 32-разрядном режиме для контроля линий AD[31:0] и C/BE[3:0]# применяется 7-битный код ECC с сигналами ECC[6:0]; в 64-разрядном режиме применяется 8-битный код с сигналами ECC[7:0]; в 16-разрядном режиме  применяется несколько измененная схема ECC7 + 1. В любом из режимов ECC-контроль позволяет исправлять только одиночные ошибки и обнаруживать большинство ошибок с большей кратностью. Исправление ошибок может быть запрещено программно (через регистр управления ECC-контролем), при этом обнаруживаются все ошибки кратности 1, 2 и 3. В любом случае в регистрах ECCконтроля сохраняется диагностическая информация. Биты ECC выводятся на шину по тем же правилам и с теми же задержками, как и биты четности. Однако сигналы PERR# и SERR# вырабатываются приемником информации через такт после действительных бит ECC — «лишний» такт отдается на анализ синдрома ECC и попытку исправления ошибки.

Обнаруженная ошибка четности, как и ошибка более чем в одном бите, обнаруженная при ECC-контроле, считается неисправимой (unrecoverable). Достоверность информации в фазе адреса, а в PCI-X и в фазе атрибутов, проверяется целевым устройством. В случае обнаружения неисправимой ошибки в этих фазах целевое устройство подает сигнал SERR# (в течение одного такта) и устанавливает в своем регистре состояния бит 14 — Signaled System Error. В фазе данных достоверность проверяет устройство-приемник данных; в случае обнаружения неисправимой ошибки оно подает сигнал PERR# и устанавливает в своем регистре состояния бит 15 — Detected Parity Error. 

В регистре состояния устройства имеется бит 8 (Master Data Parity Error), который отражает неудачу выполнения транзакции (последовательности) из-за обнаруженной ошибки данных. В PCI и PCI-X его правила установки формально различны:

  • в PCI этот бит устанавливается только инициатором транзакции, когда он сам ввел (при чтении) или обнаружил (при записи) сигнал PERR#;
  • в PCI-X этот бит устанавливается запросчиком транзакции или мостом: будучи инициатором команд чтения, мост обнаруживает ошибку в данных; будучи инициатором команд записи, мост обнаруживает сигнал PERR#; будучи целевым устройством, мост получает данные завершения с ошибкой или сообщение завершения с ошибкой транзакции записи от одного из устройств.

В случае обнаружения ошибки данных у устройства PCI-X и его драйвера есть два варианта поведения:

  • не пытаясь выполнить какие-то действия по восстановлению и продолжению работы, подать сигнал SERR# — это сигнал катастрофической ошибки, который может трактоваться ОС как повод к перезагрузке. Для устройств PCI это единственно возможный вариант поведения;
  • не подавать сигнал SERR#, а пытаться обработать ошибку самостоятельно. Это можно делать только программно с учетом всех возможных побочных эффектов от лишних операций (простой повтор чтения может, например, привести к потере данных).

Выбор варианта поведения обеспечивается установкой бита 0 (Uncorrectable Data Error Recovery Enable) в регистре PCI-X Command. По умолчанию (после сброса) он обнулен — по ошибке данных устанавливается сигнал SERR#; иной вариант должен выбирать драйвер, «умеющий» самостоятельно обрабатывать ошибки. Обнаружение ошибки в фазе адреса или атрибутов всегда является фатальной ошибкой.

Инициатор (запросчик) транзакции должен иметь возможность уведомить драйвер об отвержении транзакции по условию Master Abort (нет ответа от целевого устройства) или Target Abort (отказ целевого устройства), используя прерывания или другие подходящие средства. Если такое уведомление невозможно, устройство должно подавать сигнал SERR#.



Sitelinkx by eXtro-media.de
Яндекс.Метрика