diff options
| -rw-r--r-- | arch/sparc/Kconfig | 4 | ||||
| -rw-r--r-- | arch/sparc/defconfig | 1 | ||||
| -rw-r--r-- | arch/sparc64/kernel/entry.S | 39 | ||||
| -rw-r--r-- | arch/sparc64/kernel/power.c | 64 | ||||
| -rw-r--r-- | arch/sparc64/kernel/rtrap.S | 7 | ||||
| -rw-r--r-- | arch/sparc64/lib/VISsave.S | 8 | ||||
| -rw-r--r-- | drivers/video/p9100.c | 4 |
7 files changed, 90 insertions, 37 deletions
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 6537445dac0e..f7c51b869049 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig | |||
| @@ -21,6 +21,10 @@ config GENERIC_ISA_DMA | |||
| 21 | bool | 21 | bool |
| 22 | default y | 22 | default y |
| 23 | 23 | ||
| 24 | config GENERIC_IOMAP | ||
| 25 | bool | ||
| 26 | default y | ||
| 27 | |||
| 24 | source "init/Kconfig" | 28 | source "init/Kconfig" |
| 25 | 29 | ||
| 26 | menu "General machine setup" | 30 | menu "General machine setup" |
diff --git a/arch/sparc/defconfig b/arch/sparc/defconfig index a69856263009..8a3aef1e22f5 100644 --- a/arch/sparc/defconfig +++ b/arch/sparc/defconfig | |||
| @@ -5,6 +5,7 @@ CONFIG_MMU=y | |||
| 5 | CONFIG_UID16=y | 5 | CONFIG_UID16=y |
| 6 | CONFIG_HIGHMEM=y | 6 | CONFIG_HIGHMEM=y |
| 7 | CONFIG_GENERIC_ISA_DMA=y | 7 | CONFIG_GENERIC_ISA_DMA=y |
| 8 | CONFIG_GENERIC_IOMAP=y | ||
| 8 | 9 | ||
| 9 | # | 10 | # |
| 10 | # Code maturity level options | 11 | # Code maturity level options |
diff --git a/arch/sparc64/kernel/entry.S b/arch/sparc64/kernel/entry.S index f685035dbdb8..11a848402fb1 100644 --- a/arch/sparc64/kernel/entry.S +++ b/arch/sparc64/kernel/entry.S | |||
| @@ -33,7 +33,7 @@ | |||
| 33 | /* This is trivial with the new code... */ | 33 | /* This is trivial with the new code... */ |
| 34 | .globl do_fpdis | 34 | .globl do_fpdis |
| 35 | do_fpdis: | 35 | do_fpdis: |
| 36 | sethi %hi(TSTATE_PEF), %g4 ! IEU0 | 36 | sethi %hi(TSTATE_PEF), %g4 |
| 37 | rdpr %tstate, %g5 | 37 | rdpr %tstate, %g5 |
| 38 | andcc %g5, %g4, %g0 | 38 | andcc %g5, %g4, %g0 |
| 39 | be,pt %xcc, 1f | 39 | be,pt %xcc, 1f |
| @@ -50,18 +50,18 @@ do_fpdis: | |||
| 50 | add %g0, %g0, %g0 | 50 | add %g0, %g0, %g0 |
| 51 | ba,a,pt %xcc, rtrap_clr_l6 | 51 | ba,a,pt %xcc, rtrap_clr_l6 |
| 52 | 52 | ||
| 53 | 1: ldub [%g6 + TI_FPSAVED], %g5 ! Load Group | 53 | 1: ldub [%g6 + TI_FPSAVED], %g5 |
| 54 | wr %g0, FPRS_FEF, %fprs ! LSU Group+4bubbles | 54 | wr %g0, FPRS_FEF, %fprs |
| 55 | andcc %g5, FPRS_FEF, %g0 ! IEU1 Group | 55 | andcc %g5, FPRS_FEF, %g0 |
| 56 | be,a,pt %icc, 1f ! CTI | 56 | be,a,pt %icc, 1f |
| 57 | clr %g7 ! IEU0 | 57 | clr %g7 |
| 58 | ldx [%g6 + TI_GSR], %g7 ! Load Group | 58 | ldx [%g6 + TI_GSR], %g7 |
| 59 | 1: andcc %g5, FPRS_DL, %g0 ! IEU1 | 59 | 1: andcc %g5, FPRS_DL, %g0 |
| 60 | bne,pn %icc, 2f ! CTI | 60 | bne,pn %icc, 2f |
| 61 | fzero %f0 ! FPA | 61 | fzero %f0 |
| 62 | andcc %g5, FPRS_DU, %g0 ! IEU1 Group | 62 | andcc %g5, FPRS_DU, %g0 |
| 63 | bne,pn %icc, 1f ! CTI | 63 | bne,pn %icc, 1f |
| 64 | fzero %f2 ! FPA | 64 | fzero %f2 |
| 65 | faddd %f0, %f2, %f4 | 65 | faddd %f0, %f2, %f4 |
| 66 | fmuld %f0, %f2, %f6 | 66 | fmuld %f0, %f2, %f6 |
| 67 | faddd %f0, %f2, %f8 | 67 | faddd %f0, %f2, %f8 |
| @@ -104,8 +104,10 @@ do_fpdis: | |||
| 104 | add %g6, TI_FPREGS + 0xc0, %g2 | 104 | add %g6, TI_FPREGS + 0xc0, %g2 |
| 105 | faddd %f0, %f2, %f8 | 105 | faddd %f0, %f2, %f8 |
| 106 | fmuld %f0, %f2, %f10 | 106 | fmuld %f0, %f2, %f10 |
| 107 | ldda [%g1] ASI_BLK_S, %f32 ! grrr, where is ASI_BLK_NUCLEUS 8-( | 107 | membar #Sync |
| 108 | ldda [%g1] ASI_BLK_S, %f32 | ||
| 108 | ldda [%g2] ASI_BLK_S, %f48 | 109 | ldda [%g2] ASI_BLK_S, %f48 |
| 110 | membar #Sync | ||
| 109 | faddd %f0, %f2, %f12 | 111 | faddd %f0, %f2, %f12 |
| 110 | fmuld %f0, %f2, %f14 | 112 | fmuld %f0, %f2, %f14 |
| 111 | faddd %f0, %f2, %f16 | 113 | faddd %f0, %f2, %f16 |
| @@ -116,7 +118,6 @@ do_fpdis: | |||
| 116 | fmuld %f0, %f2, %f26 | 118 | fmuld %f0, %f2, %f26 |
| 117 | faddd %f0, %f2, %f28 | 119 | faddd %f0, %f2, %f28 |
| 118 | fmuld %f0, %f2, %f30 | 120 | fmuld %f0, %f2, %f30 |
| 119 | membar #Sync | ||
| 120 | b,pt %xcc, fpdis_exit | 121 | b,pt %xcc, fpdis_exit |
| 121 | nop | 122 | nop |
| 122 | 2: andcc %g5, FPRS_DU, %g0 | 123 | 2: andcc %g5, FPRS_DU, %g0 |
| @@ -133,8 +134,10 @@ do_fpdis: | |||
| 133 | add %g6, TI_FPREGS + 0x40, %g2 | 134 | add %g6, TI_FPREGS + 0x40, %g2 |
| 134 | faddd %f32, %f34, %f36 | 135 | faddd %f32, %f34, %f36 |
| 135 | fmuld %f32, %f34, %f38 | 136 | fmuld %f32, %f34, %f38 |
| 136 | ldda [%g1] ASI_BLK_S, %f0 ! grrr, where is ASI_BLK_NUCLEUS 8-( | 137 | membar #Sync |
| 138 | ldda [%g1] ASI_BLK_S, %f0 | ||
| 137 | ldda [%g2] ASI_BLK_S, %f16 | 139 | ldda [%g2] ASI_BLK_S, %f16 |
| 140 | membar #Sync | ||
| 138 | faddd %f32, %f34, %f40 | 141 | faddd %f32, %f34, %f40 |
| 139 | fmuld %f32, %f34, %f42 | 142 | fmuld %f32, %f34, %f42 |
| 140 | faddd %f32, %f34, %f44 | 143 | faddd %f32, %f34, %f44 |
| @@ -147,7 +150,6 @@ do_fpdis: | |||
| 147 | fmuld %f32, %f34, %f58 | 150 | fmuld %f32, %f34, %f58 |
| 148 | faddd %f32, %f34, %f60 | 151 | faddd %f32, %f34, %f60 |
| 149 | fmuld %f32, %f34, %f62 | 152 | fmuld %f32, %f34, %f62 |
| 150 | membar #Sync | ||
| 151 | ba,pt %xcc, fpdis_exit | 153 | ba,pt %xcc, fpdis_exit |
| 152 | nop | 154 | nop |
| 153 | 3: mov SECONDARY_CONTEXT, %g3 | 155 | 3: mov SECONDARY_CONTEXT, %g3 |
| @@ -158,7 +160,8 @@ do_fpdis: | |||
| 158 | stxa %g2, [%g3] ASI_DMMU | 160 | stxa %g2, [%g3] ASI_DMMU |
| 159 | membar #Sync | 161 | membar #Sync |
| 160 | mov 0x40, %g2 | 162 | mov 0x40, %g2 |
| 161 | ldda [%g1] ASI_BLK_S, %f0 ! grrr, where is ASI_BLK_NUCLEUS 8-( | 163 | membar #Sync |
| 164 | ldda [%g1] ASI_BLK_S, %f0 | ||
| 162 | ldda [%g1 + %g2] ASI_BLK_S, %f16 | 165 | ldda [%g1 + %g2] ASI_BLK_S, %f16 |
| 163 | add %g1, 0x80, %g1 | 166 | add %g1, 0x80, %g1 |
| 164 | ldda [%g1] ASI_BLK_S, %f32 | 167 | ldda [%g1] ASI_BLK_S, %f32 |
diff --git a/arch/sparc64/kernel/power.c b/arch/sparc64/kernel/power.c index 946cee0257ea..9e8362ea3104 100644 --- a/arch/sparc64/kernel/power.c +++ b/arch/sparc64/kernel/power.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | 17 | ||
| 18 | #include <asm/system.h> | 18 | #include <asm/system.h> |
| 19 | #include <asm/ebus.h> | 19 | #include <asm/ebus.h> |
| 20 | #include <asm/isa.h> | ||
| 20 | #include <asm/auxio.h> | 21 | #include <asm/auxio.h> |
| 21 | 22 | ||
| 22 | #include <linux/unistd.h> | 23 | #include <linux/unistd.h> |
| @@ -100,46 +101,83 @@ again: | |||
| 100 | return 0; | 101 | return 0; |
| 101 | } | 102 | } |
| 102 | 103 | ||
| 103 | static int __init has_button_interrupt(struct linux_ebus_device *edev) | 104 | static int __init has_button_interrupt(unsigned int irq, int prom_node) |
| 104 | { | 105 | { |
| 105 | if (edev->irqs[0] == PCI_IRQ_NONE) | 106 | if (irq == PCI_IRQ_NONE) |
| 106 | return 0; | 107 | return 0; |
| 107 | if (!prom_node_has_property(edev->prom_node, "button")) | 108 | if (!prom_node_has_property(prom_node, "button")) |
| 108 | return 0; | 109 | return 0; |
| 109 | 110 | ||
| 110 | return 1; | 111 | return 1; |
| 111 | } | 112 | } |
| 112 | 113 | ||
| 113 | void __init power_init(void) | 114 | static int __init power_probe_ebus(struct resource **resp, unsigned int *irq_p, int *prom_node_p) |
| 114 | { | 115 | { |
| 115 | struct linux_ebus *ebus; | 116 | struct linux_ebus *ebus; |
| 116 | struct linux_ebus_device *edev; | 117 | struct linux_ebus_device *edev; |
| 118 | |||
| 119 | for_each_ebus(ebus) { | ||
| 120 | for_each_ebusdev(edev, ebus) { | ||
| 121 | if (!strcmp(edev->prom_name, "power")) { | ||
| 122 | *resp = &edev->resource[0]; | ||
| 123 | *irq_p = edev->irqs[0]; | ||
| 124 | *prom_node_p = edev->prom_node; | ||
| 125 | return 0; | ||
| 126 | } | ||
| 127 | } | ||
| 128 | } | ||
| 129 | return -ENODEV; | ||
| 130 | } | ||
| 131 | |||
| 132 | static int __init power_probe_isa(struct resource **resp, unsigned int *irq_p, int *prom_node_p) | ||
| 133 | { | ||
| 134 | struct sparc_isa_bridge *isa_bus; | ||
| 135 | struct sparc_isa_device *isa_dev; | ||
| 136 | |||
| 137 | for_each_isa(isa_bus) { | ||
| 138 | for_each_isadev(isa_dev, isa_bus) { | ||
| 139 | if (!strcmp(isa_dev->prom_name, "power")) { | ||
| 140 | *resp = &isa_dev->resource; | ||
| 141 | *irq_p = isa_dev->irq; | ||
| 142 | *prom_node_p = isa_dev->prom_node; | ||
| 143 | return 0; | ||
| 144 | } | ||
| 145 | } | ||
| 146 | } | ||
| 147 | return -ENODEV; | ||
| 148 | } | ||
| 149 | |||
| 150 | void __init power_init(void) | ||
| 151 | { | ||
| 152 | struct resource *res = NULL; | ||
| 153 | unsigned int irq; | ||
| 154 | int prom_node; | ||
| 117 | static int invoked; | 155 | static int invoked; |
| 118 | 156 | ||
| 119 | if (invoked) | 157 | if (invoked) |
| 120 | return; | 158 | return; |
| 121 | invoked = 1; | 159 | invoked = 1; |
| 122 | 160 | ||
| 123 | for_each_ebus(ebus) { | 161 | if (!power_probe_ebus(&res, &irq, &prom_node)) |
| 124 | for_each_ebusdev(edev, ebus) { | 162 | goto found; |
| 125 | if (!strcmp(edev->prom_name, "power")) | 163 | |
| 126 | goto found; | 164 | if (!power_probe_isa(&res, &irq, &prom_node)) |
| 127 | } | 165 | goto found; |
| 128 | } | 166 | |
| 129 | return; | 167 | return; |
| 130 | 168 | ||
| 131 | found: | 169 | found: |
| 132 | power_reg = ioremap(edev->resource[0].start, 0x4); | 170 | power_reg = ioremap(res->start, 0x4); |
| 133 | printk("power: Control reg at %p ... ", power_reg); | 171 | printk("power: Control reg at %p ... ", power_reg); |
| 134 | poweroff_method = machine_halt; /* able to use the standard halt */ | 172 | poweroff_method = machine_halt; /* able to use the standard halt */ |
| 135 | if (has_button_interrupt(edev)) { | 173 | if (has_button_interrupt(irq, prom_node)) { |
| 136 | if (kernel_thread(powerd, NULL, CLONE_FS) < 0) { | 174 | if (kernel_thread(powerd, NULL, CLONE_FS) < 0) { |
| 137 | printk("Failed to start power daemon.\n"); | 175 | printk("Failed to start power daemon.\n"); |
| 138 | return; | 176 | return; |
| 139 | } | 177 | } |
| 140 | printk("powerd running.\n"); | 178 | printk("powerd running.\n"); |
| 141 | 179 | ||
| 142 | if (request_irq(edev->irqs[0], | 180 | if (request_irq(irq, |
| 143 | power_handler, SA_SHIRQ, "power", NULL) < 0) | 181 | power_handler, SA_SHIRQ, "power", NULL) < 0) |
| 144 | printk("power: Error, cannot register IRQ handler.\n"); | 182 | printk("power: Error, cannot register IRQ handler.\n"); |
| 145 | } else { | 183 | } else { |
diff --git a/arch/sparc64/kernel/rtrap.S b/arch/sparc64/kernel/rtrap.S index ecfb42a69a44..090dcca00d2a 100644 --- a/arch/sparc64/kernel/rtrap.S +++ b/arch/sparc64/kernel/rtrap.S | |||
| @@ -312,32 +312,33 @@ kern_fpucheck: ldub [%g6 + TI_FPDEPTH], %l5 | |||
| 312 | wr %g1, FPRS_FEF, %fprs | 312 | wr %g1, FPRS_FEF, %fprs |
| 313 | ldx [%o1 + %o5], %g1 | 313 | ldx [%o1 + %o5], %g1 |
| 314 | add %g6, TI_XFSR, %o1 | 314 | add %g6, TI_XFSR, %o1 |
| 315 | membar #StoreLoad | #LoadLoad | ||
| 316 | sll %o0, 8, %o2 | 315 | sll %o0, 8, %o2 |
| 317 | add %g6, TI_FPREGS, %o3 | 316 | add %g6, TI_FPREGS, %o3 |
| 318 | brz,pn %l6, 1f | 317 | brz,pn %l6, 1f |
| 319 | add %g6, TI_FPREGS+0x40, %o4 | 318 | add %g6, TI_FPREGS+0x40, %o4 |
| 320 | 319 | ||
| 320 | membar #Sync | ||
| 321 | ldda [%o3 + %o2] ASI_BLK_P, %f0 | 321 | ldda [%o3 + %o2] ASI_BLK_P, %f0 |
| 322 | ldda [%o4 + %o2] ASI_BLK_P, %f16 | 322 | ldda [%o4 + %o2] ASI_BLK_P, %f16 |
| 323 | membar #Sync | ||
| 323 | 1: andcc %l2, FPRS_DU, %g0 | 324 | 1: andcc %l2, FPRS_DU, %g0 |
| 324 | be,pn %icc, 1f | 325 | be,pn %icc, 1f |
| 325 | wr %g1, 0, %gsr | 326 | wr %g1, 0, %gsr |
| 326 | add %o2, 0x80, %o2 | 327 | add %o2, 0x80, %o2 |
| 328 | membar #Sync | ||
| 327 | ldda [%o3 + %o2] ASI_BLK_P, %f32 | 329 | ldda [%o3 + %o2] ASI_BLK_P, %f32 |
| 328 | ldda [%o4 + %o2] ASI_BLK_P, %f48 | 330 | ldda [%o4 + %o2] ASI_BLK_P, %f48 |
| 329 | |||
| 330 | 1: membar #Sync | 331 | 1: membar #Sync |
| 331 | ldx [%o1 + %o5], %fsr | 332 | ldx [%o1 + %o5], %fsr |
| 332 | 2: stb %l5, [%g6 + TI_FPDEPTH] | 333 | 2: stb %l5, [%g6 + TI_FPDEPTH] |
| 333 | ba,pt %xcc, rt_continue | 334 | ba,pt %xcc, rt_continue |
| 334 | nop | 335 | nop |
| 335 | 5: wr %g0, FPRS_FEF, %fprs | 336 | 5: wr %g0, FPRS_FEF, %fprs |
| 336 | membar #StoreLoad | #LoadLoad | ||
| 337 | sll %o0, 8, %o2 | 337 | sll %o0, 8, %o2 |
| 338 | 338 | ||
| 339 | add %g6, TI_FPREGS+0x80, %o3 | 339 | add %g6, TI_FPREGS+0x80, %o3 |
| 340 | add %g6, TI_FPREGS+0xc0, %o4 | 340 | add %g6, TI_FPREGS+0xc0, %o4 |
| 341 | membar #Sync | ||
| 341 | ldda [%o3 + %o2] ASI_BLK_P, %f32 | 342 | ldda [%o3 + %o2] ASI_BLK_P, %f32 |
| 342 | ldda [%o4 + %o2] ASI_BLK_P, %f48 | 343 | ldda [%o4 + %o2] ASI_BLK_P, %f48 |
| 343 | membar #Sync | 344 | membar #Sync |
diff --git a/arch/sparc64/lib/VISsave.S b/arch/sparc64/lib/VISsave.S index 4e18989bd602..a0ded5c5aa5c 100644 --- a/arch/sparc64/lib/VISsave.S +++ b/arch/sparc64/lib/VISsave.S | |||
| @@ -59,15 +59,17 @@ vis1: ldub [%g6 + TI_FPSAVED], %g3 | |||
| 59 | be,pn %icc, 9b | 59 | be,pn %icc, 9b |
| 60 | add %g6, TI_FPREGS, %g2 | 60 | add %g6, TI_FPREGS, %g2 |
| 61 | andcc %o5, FPRS_DL, %g0 | 61 | andcc %o5, FPRS_DL, %g0 |
| 62 | membar #StoreStore | #LoadStore | ||
| 63 | 62 | ||
| 64 | be,pn %icc, 4f | 63 | be,pn %icc, 4f |
| 65 | add %g6, TI_FPREGS+0x40, %g3 | 64 | add %g6, TI_FPREGS+0x40, %g3 |
| 65 | membar #Sync | ||
| 66 | stda %f0, [%g2 + %g1] ASI_BLK_P | 66 | stda %f0, [%g2 + %g1] ASI_BLK_P |
| 67 | stda %f16, [%g3 + %g1] ASI_BLK_P | 67 | stda %f16, [%g3 + %g1] ASI_BLK_P |
| 68 | membar #Sync | ||
| 68 | andcc %o5, FPRS_DU, %g0 | 69 | andcc %o5, FPRS_DU, %g0 |
| 69 | be,pn %icc, 5f | 70 | be,pn %icc, 5f |
| 70 | 4: add %g1, 128, %g1 | 71 | 4: add %g1, 128, %g1 |
| 72 | membar #Sync | ||
| 71 | stda %f32, [%g2 + %g1] ASI_BLK_P | 73 | stda %f32, [%g2 + %g1] ASI_BLK_P |
| 72 | 74 | ||
| 73 | stda %f48, [%g3 + %g1] ASI_BLK_P | 75 | stda %f48, [%g3 + %g1] ASI_BLK_P |
| @@ -87,7 +89,7 @@ vis1: ldub [%g6 + TI_FPSAVED], %g3 | |||
| 87 | sll %g1, 5, %g1 | 89 | sll %g1, 5, %g1 |
| 88 | add %g6, TI_FPREGS+0xc0, %g3 | 90 | add %g6, TI_FPREGS+0xc0, %g3 |
| 89 | wr %g0, FPRS_FEF, %fprs | 91 | wr %g0, FPRS_FEF, %fprs |
| 90 | membar #StoreStore | #LoadStore | 92 | membar #Sync |
| 91 | stda %f32, [%g2 + %g1] ASI_BLK_P | 93 | stda %f32, [%g2 + %g1] ASI_BLK_P |
| 92 | stda %f48, [%g3 + %g1] ASI_BLK_P | 94 | stda %f48, [%g3 + %g1] ASI_BLK_P |
| 93 | membar #Sync | 95 | membar #Sync |
| @@ -128,8 +130,8 @@ VISenterhalf: | |||
| 128 | be,pn %icc, 4f | 130 | be,pn %icc, 4f |
| 129 | add %g6, TI_FPREGS, %g2 | 131 | add %g6, TI_FPREGS, %g2 |
| 130 | 132 | ||
| 131 | membar #StoreStore | #LoadStore | ||
| 132 | add %g6, TI_FPREGS+0x40, %g3 | 133 | add %g6, TI_FPREGS+0x40, %g3 |
| 134 | membar #Sync | ||
| 133 | stda %f0, [%g2 + %g1] ASI_BLK_P | 135 | stda %f0, [%g2 + %g1] ASI_BLK_P |
| 134 | stda %f16, [%g3 + %g1] ASI_BLK_P | 136 | stda %f16, [%g3 + %g1] ASI_BLK_P |
| 135 | membar #Sync | 137 | membar #Sync |
diff --git a/drivers/video/p9100.c b/drivers/video/p9100.c index 7808a01493ad..b76a5a9a125b 100644 --- a/drivers/video/p9100.c +++ b/drivers/video/p9100.c | |||
| @@ -288,6 +288,9 @@ static void p9100_init_one(struct sbus_dev *sdev) | |||
| 288 | all->par.physbase = sdev->reg_addrs[2].phys_addr; | 288 | all->par.physbase = sdev->reg_addrs[2].phys_addr; |
| 289 | 289 | ||
| 290 | sbusfb_fill_var(&all->info.var, sdev->prom_node, 8); | 290 | sbusfb_fill_var(&all->info.var, sdev->prom_node, 8); |
| 291 | all->info.var.red.length = 8; | ||
| 292 | all->info.var.green.length = 8; | ||
| 293 | all->info.var.blue.length = 8; | ||
| 291 | 294 | ||
| 292 | linebytes = prom_getintdefault(sdev->prom_node, "linebytes", | 295 | linebytes = prom_getintdefault(sdev->prom_node, "linebytes", |
| 293 | all->info.var.xres); | 296 | all->info.var.xres); |
| @@ -323,6 +326,7 @@ static void p9100_init_one(struct sbus_dev *sdev) | |||
| 323 | kfree(all); | 326 | kfree(all); |
| 324 | return; | 327 | return; |
| 325 | } | 328 | } |
| 329 | fb_set_cmap(&all->info.cmap, &all->info); | ||
| 326 | 330 | ||
| 327 | list_add(&all->list, &p9100_list); | 331 | list_add(&all->list, &p9100_list); |
| 328 | 332 | ||
