aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio
diff options
context:
space:
mode:
authorCornelia Huck <cornelia.huck@de.ibm.com>2008-06-10 04:03:21 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2008-06-10 04:03:27 -0400
commit85b0d7c0ad92c47887bf6aeb424a14e7af14bd87 (patch)
tree73518414cb38cfc2865828b5b836920523b7710f /drivers/s390/cio
parentee0ddadd086e25503f81be551c43f66472300acd (diff)
[S390] cio: Fix inverted isc priorities.
Priorities for I/O interruption subclasses range from 0 (highest) to 7 (lowest). Unfortunately, the console has been using isc 7 instead of an isc with a higher priority than regular I/O subchannels (which use 3). Fix this by making the console use isc 1. Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/cio')
-rw-r--r--drivers/s390/cio/cio.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/s390/cio/cio.c b/drivers/s390/cio/cio.c
index 82c6a2d45128..b32d7eb3d81a 100644
--- a/drivers/s390/cio/cio.c
+++ b/drivers/s390/cio/cio.c
@@ -576,12 +576,14 @@ cio_validate_subchannel (struct subchannel *sch, struct subchannel_id schid)
576 err = -ENODEV; 576 err = -ENODEV;
577 goto out; 577 goto out;
578 } 578 }
579 if (cio_is_console(sch->schid)) 579 if (cio_is_console(sch->schid)) {
580 sch->opm = 0xff; 580 sch->opm = 0xff;
581 else 581 sch->isc = 1;
582 } else {
582 sch->opm = chp_get_sch_opm(sch); 583 sch->opm = chp_get_sch_opm(sch);
584 sch->isc = 3;
585 }
583 sch->lpm = sch->schib.pmcw.pam & sch->opm; 586 sch->lpm = sch->schib.pmcw.pam & sch->opm;
584 sch->isc = 3;
585 587
586 CIO_MSG_EVENT(6, "Detected device %04x on subchannel 0.%x.%04X " 588 CIO_MSG_EVENT(6, "Detected device %04x on subchannel 0.%x.%04X "
587 "- PIM = %02X, PAM = %02X, POM = %02X\n", 589 "- PIM = %02X, PAM = %02X, POM = %02X\n",
@@ -704,9 +706,9 @@ void wait_cons_dev(void)
704 if (!console_subchannel_in_use) 706 if (!console_subchannel_in_use)
705 return; 707 return;
706 708
707 /* disable all but isc 7 (console device) */ 709 /* disable all but isc 1 (console device) */
708 __ctl_store (save_cr6, 6, 6); 710 __ctl_store (save_cr6, 6, 6);
709 cr6 = 0x01000000; 711 cr6 = 0x40000000;
710 __ctl_load (cr6, 6, 6); 712 __ctl_load (cr6, 6, 6);
711 713
712 do { 714 do {
@@ -788,11 +790,11 @@ cio_probe_console(void)
788 } 790 }
789 791
790 /* 792 /*
791 * enable console I/O-interrupt subclass 7 793 * enable console I/O-interrupt subclass 1
792 */ 794 */
793 ctl_set_bit(6, 24); 795 ctl_set_bit(6, 30);
794 console_subchannel.isc = 7; 796 console_subchannel.isc = 1;
795 console_subchannel.schib.pmcw.isc = 7; 797 console_subchannel.schib.pmcw.isc = 1;
796 console_subchannel.schib.pmcw.intparm = 798 console_subchannel.schib.pmcw.intparm =
797 (u32)(addr_t)&console_subchannel; 799 (u32)(addr_t)&console_subchannel;
798 ret = cio_modify(&console_subchannel); 800 ret = cio_modify(&console_subchannel);