struct axon_ram_bank {
struct of_device *device;
struct gendisk *disk;
- unsigned int irq_correctable;
- unsigned int irq_uncorrectable;
+ unsigned int irq_id;
unsigned long ph_addr;
unsigned long io_addr;
unsigned long size;
BUG_ON(!bank);
- if (irq == bank->irq_correctable) {
- dev_err(&device->dev, "Correctable memory error occured\n");
- bank->ecc_counter++;
- return IRQ_HANDLED;
- } else if (irq == bank->irq_uncorrectable) {
- dev_err(&device->dev, "Uncorrectable memory error occured\n");
- panic("Critical ECC error on %s", device->node->full_name);
- }
-
- return IRQ_NONE;
+ dev_err(&device->dev, "Correctable memory error occured\n");
+ bank->ecc_counter++;
+ return IRQ_HANDLED;
}
/**
blk_queue_hardsect_size(bank->disk->queue, AXON_RAM_SECTOR_SIZE);
add_disk(bank->disk);
- bank->irq_correctable = irq_of_parse_and_map(device->node, 0);
- bank->irq_uncorrectable = irq_of_parse_and_map(device->node, 1);
- if ((bank->irq_correctable <= 0) || (bank->irq_uncorrectable <= 0)) {
+ bank->irq_id = irq_of_parse_and_map(device->node, 0);
+ if (bank->irq_id == NO_IRQ) {
dev_err(&device->dev, "Cannot access ECC interrupt ID\n");
rc = -EFAULT;
goto failed;
}
- rc = request_irq(bank->irq_correctable, axon_ram_irq_handler,
- AXON_RAM_IRQ_FLAGS, bank->disk->disk_name, device);
- if (rc != 0) {
- dev_err(&device->dev, "Cannot register ECC interrupt handler\n");
- bank->irq_correctable = bank->irq_uncorrectable = 0;
- rc = -EFAULT;
- goto failed;
- }
-
- rc = request_irq(bank->irq_uncorrectable, axon_ram_irq_handler,
+ rc = request_irq(bank->irq_id, axon_ram_irq_handler,
AXON_RAM_IRQ_FLAGS, bank->disk->disk_name, device);
if (rc != 0) {
dev_err(&device->dev, "Cannot register ECC interrupt handler\n");
- bank->irq_uncorrectable = 0;
+ bank->irq_id = NO_IRQ;
rc = -EFAULT;
goto failed;
}
failed:
if (bank != NULL) {
- if (bank->irq_uncorrectable > 0)
- free_irq(bank->irq_uncorrectable, device);
- if (bank->irq_correctable > 0)
- free_irq(bank->irq_correctable, device);
+ if (bank->irq_id != NO_IRQ)
+ free_irq(bank->irq_id, device);
if (bank->disk != NULL) {
if (bank->disk->queue != NULL)
blk_cleanup_queue(bank->disk->queue);
BUG_ON(!bank || !bank->disk);
device_remove_file(&device->dev, &dev_attr_ecc);
- free_irq(bank->irq_uncorrectable, device);
- free_irq(bank->irq_correctable, device);
+ free_irq(bank->irq_id, device);
blk_cleanup_queue(bank->disk->queue);
unregister_blkdev(bank->disk->major, bank->disk->disk_name);
del_gendisk(bank->disk);