Commit e766f1cc596078b1603ac2c96617660c4c7e2d81

Authored by Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6

Showing 20 changed files Side-by-side Diff

arch/sparc/kernel/sparc_ksyms.c
... ... @@ -175,7 +175,6 @@
175 175 EXPORT_SYMBOL(get_auxio);
176 176 #endif
177 177 EXPORT_SYMBOL(request_fast_irq);
178   -EXPORT_SYMBOL(io_remap_page_range);
179 178 EXPORT_SYMBOL(io_remap_pfn_range);
180 179 /* P3: iounit_xxx may be needed, sun4d users */
181 180 /* EXPORT_SYMBOL(iounit_map_dma_init); */
arch/sparc/mm/generic.c
... ... @@ -16,31 +16,6 @@
16 16 #include <asm/cacheflush.h>
17 17 #include <asm/tlbflush.h>
18 18  
19   -static inline void forget_pte(pte_t page)
20   -{
21   -#if 0 /* old 2.4 code */
22   - if (pte_none(page))
23   - return;
24   - if (pte_present(page)) {
25   - unsigned long pfn = pte_pfn(page);
26   - struct page *ptpage;
27   - if (!pfn_valid(pfn))
28   - return;
29   - ptpage = pfn_to_page(pfn);
30   - if (PageReserved(ptpage))
31   - return;
32   - page_cache_release(ptpage);
33   - return;
34   - }
35   - swap_free(pte_to_swp_entry(page));
36   -#else
37   - if (!pte_none(page)) {
38   - printk("forget_pte: old mapping existed!\n");
39   - BUG();
40   - }
41   -#endif
42   -}
43   -
44 19 /* Remap IO memory, the same way as remap_pfn_range(), but use
45 20 * the obio memory space.
46 21 *
... ... @@ -60,7 +35,6 @@
60 35 pte_t oldpage = *pte;
61 36 pte_clear(mm, address, pte);
62 37 set_pte(pte, mk_pte_io(offset, prot, space));
63   - forget_pte(oldpage);
64 38 address += PAGE_SIZE;
65 39 offset += PAGE_SIZE;
66 40 pte++;
... ... @@ -86,37 +60,6 @@
86 60 pmd++;
87 61 } while (address < end);
88 62 return 0;
89   -}
90   -
91   -int io_remap_page_range(struct vm_area_struct *vma, unsigned long from, unsigned long offset, unsigned long size, pgprot_t prot, int space)
92   -{
93   - int error = 0;
94   - pgd_t * dir;
95   - unsigned long beg = from;
96   - unsigned long end = from + size;
97   - struct mm_struct *mm = vma->vm_mm;
98   -
99   - prot = __pgprot(pg_iobits);
100   - offset -= from;
101   - dir = pgd_offset(mm, from);
102   - flush_cache_range(vma, beg, end);
103   -
104   - spin_lock(&mm->page_table_lock);
105   - while (from < end) {
106   - pmd_t *pmd = pmd_alloc(current->mm, dir, from);
107   - error = -ENOMEM;
108   - if (!pmd)
109   - break;
110   - error = io_remap_pmd_range(mm, pmd, from, end - from, offset + from, prot, space);
111   - if (error)
112   - break;
113   - from = (from + PGDIR_SIZE) & PGDIR_MASK;
114   - dir++;
115   - }
116   - spin_unlock(&mm->page_table_lock);
117   -
118   - flush_tlb_range(vma, beg, end);
119   - return error;
120 63 }
121 64  
122 65 int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
arch/sparc64/Kconfig
... ... @@ -5,6 +5,16 @@
5 5  
6 6 mainmenu "Linux/UltraSPARC Kernel Configuration"
7 7  
  8 +config SPARC64
  9 + bool
  10 + default y
  11 + help
  12 + SPARC is a family of RISC microprocessors designed and marketed by
  13 + Sun Microsystems, incorporated. This port covers the newer 64-bit
  14 + UltraSPARC. The UltraLinux project maintains both the SPARC32 and
  15 + SPARC64 ports; its web page is available at
  16 + <http://www.ultralinux.org/>.
  17 +
8 18 config 64BIT
9 19 def_bool y
10 20  
... ... @@ -71,75 +81,6 @@
71 81  
72 82 menu "General machine setup"
73 83  
74   -config BBC_I2C
75   - tristate "UltraSPARC-III bootbus i2c controller driver"
76   - depends on PCI
77   - help
78   - The BBC devices on the UltraSPARC III have two I2C controllers. The
79   - first I2C controller connects mainly to configuration PROMs (NVRAM,
80   - CPU configuration, DIMM types, etc.). The second I2C controller
81   - connects to environmental control devices such as fans and
82   - temperature sensors. The second controller also connects to the
83   - smartcard reader, if present. Say Y to enable support for these.
84   -
85   -config VT
86   - bool "Virtual terminal" if EMBEDDED
87   - select INPUT
88   - default y
89   - ---help---
90   - If you say Y here, you will get support for terminal devices with
91   - display and keyboard devices. These are called "virtual" because you
92   - can run several virtual terminals (also called virtual consoles) on
93   - one physical terminal. This is rather useful, for example one
94   - virtual terminal can collect system messages and warnings, another
95   - one can be used for a text-mode user session, and a third could run
96   - an X session, all in parallel. Switching between virtual terminals
97   - is done with certain key combinations, usually Alt-<function key>.
98   -
99   - The setterm command ("man setterm") can be used to change the
100   - properties (such as colors or beeping) of a virtual terminal. The
101   - man page console_codes(4) ("man console_codes") contains the special
102   - character sequences that can be used to change those properties
103   - directly. The fonts used on virtual terminals can be changed with
104   - the setfont ("man setfont") command and the key bindings are defined
105   - with the loadkeys ("man loadkeys") command.
106   -
107   - You need at least one virtual terminal device in order to make use
108   - of your keyboard and monitor. Therefore, only people configuring an
109   - embedded system would want to say N here in order to save some
110   - memory; the only way to log into such a system is then via a serial
111   - or network connection.
112   -
113   - If unsure, say Y, or else you won't be able to do much with your new
114   - shiny Linux system :-)
115   -
116   -config VT_CONSOLE
117   - bool "Support for console on virtual terminal" if EMBEDDED
118   - depends on VT
119   - default y
120   - ---help---
121   - The system console is the device which receives all kernel messages
122   - and warnings and which allows logins in single user mode. If you
123   - answer Y here, a virtual terminal (the device used to interact with
124   - a physical terminal) can be used as system console. This is the most
125   - common mode of operations, so you should say Y here unless you want
126   - the kernel messages be output only to a serial port (in which case
127   - you should say Y to "Console on serial port", below).
128   -
129   - If you do say Y here, by default the currently visible virtual
130   - terminal (/dev/tty0) will be used as system console. You can change
131   - that with a kernel command line option such as "console=tty3" which
132   - would use the third virtual terminal as system console. (Try "man
133   - bootparam" or see the documentation of your boot loader (lilo or
134   - loadlin) about how to pass options to the kernel at boot time.)
135   -
136   - If unsure, say Y.
137   -
138   -config HW_CONSOLE
139   - bool
140   - depends on VT
141   - default y
142   -
143 84 config SMP
144 85 bool "Symmetric multi-processing support"
145 86 ---help---
... ... @@ -205,17 +146,6 @@
205 146  
206 147 If in doubt, say N.
207 148  
208   -# Identify this as a Sparc64 build
209   -config SPARC64
210   - bool
211   - default y
212   - help
213   - SPARC is a family of RISC microprocessors designed and marketed by
214   - Sun Microsystems, incorporated. This port covers the newer 64-bit
215   - UltraSPARC. The UltraLinux project maintains both the SPARC32 and
216   - SPARC64 ports; its web page is available at
217   - <http://www.ultralinux.org/>.
218   -
219 149 # Global things across all Sun machines.
220 150 config RWSEM_GENERIC_SPINLOCK
221 151 bool
... ... @@ -246,6 +176,12 @@
246 176  
247 177 endchoice
248 178  
  179 +endmenu
  180 +
  181 +source "drivers/firmware/Kconfig"
  182 +
  183 +source "mm/Kconfig"
  184 +
249 185 config GENERIC_ISA_DMA
250 186 bool
251 187 default y
... ... @@ -344,33 +280,6 @@
344 280 bool
345 281 default PCI
346 282  
347   -config RTC
348   - tristate
349   - depends on PCI
350   - default y
351   - ---help---
352   - If you say Y here and create a character special file /dev/rtc with
353   - major number 10 and minor number 135 using mknod ("man mknod"), you
354   - will get access to the real time clock (or hardware clock) built
355   - into your computer.
356   -
357   - Every PC has such a clock built in. It can be used to generate
358   - signals from as low as 1Hz up to 8192Hz, and can also be used
359   - as a 24 hour alarm. It reports status information via the file
360   - /proc/driver/rtc and its behaviour is set by various ioctls on
361   - /dev/rtc.
362   -
363   - If you run Linux on a multiprocessor machine and said Y to
364   - "Symmetric Multi Processing" above, you should say Y here to read
365   - and set the RTC in an SMP compatible fashion.
366   -
367   - If you think you have a use for such a device (such as periodic data
368   - sampling), then say Y here, and read <file:Documentation/rtc.txt>
369   - for details.
370   -
371   - To compile this driver as a module, choose M here: the
372   - module will be called rtc.
373   -
374 283 source "drivers/pci/Kconfig"
375 284  
376 285 config SUN_OPENPROMFS
... ... @@ -414,6 +323,8 @@
414 323 If you want to run SunOS binaries (see SunOS binary emulation below)
415 324 or other a.out binaries, say Y. If unsure, say N.
416 325  
  326 +menu "Executable file formats"
  327 +
417 328 source "fs/Kconfig.binfmt"
418 329  
419 330 config SUNOS_EMUL
420 331  
... ... @@ -436,75 +347,8 @@
436 347 To compile this code as a module, choose M here: the
437 348 module will be called solaris.
438 349  
439   -source "drivers/parport/Kconfig"
  350 +endmenu
440 351  
441   -config PRINTER
442   - tristate "Parallel printer support"
443   - depends on PARPORT
444   - ---help---
445   - If you intend to attach a printer to the parallel port of your Linux
446   - box (as opposed to using a serial printer; if the connector at the
447   - printer has 9 or 25 holes ["female"], then it's serial), say Y.
448   - Also read the Printing-HOWTO, available from
449   - <http://www.tldp.org/docs.html#howto>.
450   -
451   - It is possible to share one parallel port among several devices
452   - (e.g. printer and ZIP drive) and it is safe to compile the
453   - corresponding drivers into the kernel.
454   - To compile this driver as a module, choose M here and read
455   - <file:Documentation/parport.txt>. The module will be called lp.
456   -
457   - If you have several parallel ports, you can specify which ports to
458   - use with the "lp" kernel command line option. (Try "man bootparam"
459   - or see the documentation of your boot loader (lilo or loadlin) about
460   - how to pass options to the kernel at boot time.) The syntax of the
461   - "lp" command line option can be found in <file:drivers/char/lp.c>.
462   -
463   - If you have more than 8 printers, you need to increase the LP_NO
464   - macro in lp.c and the PARPORT_MAX macro in parport.h.
465   -
466   -config PPDEV
467   - tristate "Support for user-space parallel port device drivers"
468   - depends on PARPORT
469   - ---help---
470   - Saying Y to this adds support for /dev/parport device nodes. This
471   - is needed for programs that want portable access to the parallel
472   - port, for instance deviceid (which displays Plug-and-Play device
473   - IDs).
474   -
475   - This is the parallel port equivalent of SCSI generic support (sg).
476   - It is safe to say N to this -- it is not needed for normal printing
477   - or parallel port CD-ROM/disk support.
478   -
479   - To compile this driver as a module, choose M here: the
480   - module will be called ppdev.
481   -
482   - If unsure, say N.
483   -
484   -config ENVCTRL
485   - tristate "SUNW, envctrl support"
486   - depends on PCI
487   - help
488   - Kernel support for temperature and fan monitoring on Sun SME
489   - machines.
490   -
491   - To compile this driver as a module, choose M here: the
492   - module will be called envctrl.
493   -
494   -config DISPLAY7SEG
495   - tristate "7-Segment Display support"
496   - depends on PCI
497   - ---help---
498   - This is the driver for the 7-segment display and LED present on
499   - Sun Microsystems CompactPCI models CP1400 and CP1500.
500   -
501   - To compile this driver as a module, choose M here: the
502   - module will be called display7seg.
503   -
504   - If you do not have a CompactPCI model CP1400 or CP1500, or
505   - another UltraSPARC-IIi-cEngine boardset with a 7-segment display,
506   - you should say N to this option.
507   -
508 352 config CMDLINE_BOOL
509 353 bool "Default bootloader kernel arguments"
510 354  
511 355  
512 356  
513 357  
514 358  
515 359  
... ... @@ -521,147 +365,15 @@
521 365  
522 366 NOTE: This option WILL override the PROM bootargs setting!
523 367  
524   -source "mm/Kconfig"
525   -
526   -endmenu
527   -
528 368 source "net/Kconfig"
529 369  
530   -source "drivers/base/Kconfig"
  370 +source "drivers/Kconfig"
531 371  
532   -source "drivers/video/Kconfig"
533   -
534   -source "drivers/serial/Kconfig"
535   -
536 372 source "drivers/sbus/char/Kconfig"
537 373  
538   -source "drivers/mtd/Kconfig"
539   -
540   -source "drivers/block/Kconfig"
541   -
542   -source "drivers/ide/Kconfig"
543   -
544   -source "drivers/scsi/Kconfig"
545   -
546 374 source "drivers/fc4/Kconfig"
547 375  
548   -source "drivers/md/Kconfig"
549   -
550   -if PCI
551   -source "drivers/message/fusion/Kconfig"
552   -endif
553   -
554   -source "drivers/ieee1394/Kconfig"
555   -
556   -source "drivers/net/Kconfig"
557   -
558   -source "drivers/isdn/Kconfig"
559   -
560   -source "drivers/telephony/Kconfig"
561   -
562   -# This one must be before the filesystem configs. -DaveM
563   -
564   -menu "Unix98 PTY support"
565   -
566   -config UNIX98_PTYS
567   - bool "Unix98 PTY support"
568   - ---help---
569   - A pseudo terminal (PTY) is a software device consisting of two
570   - halves: a master and a slave. The slave device behaves identical to
571   - a physical terminal; the master device is used by a process to
572   - read data from and write data to the slave, thereby emulating a
573   - terminal. Typical programs for the master side are telnet servers
574   - and xterms.
575   -
576   - Linux has traditionally used the BSD-like names /dev/ptyxx for
577   - masters and /dev/ttyxx for slaves of pseudo terminals. This scheme
578   - has a number of problems. The GNU C library glibc 2.1 and later,
579   - however, supports the Unix98 naming standard: in order to acquire a
580   - pseudo terminal, a process opens /dev/ptmx; the number of the pseudo
581   - terminal is then made available to the process and the pseudo
582   - terminal slave can be accessed as /dev/pts/<number>. What was
583   - traditionally /dev/ttyp2 will then be /dev/pts/2, for example.
584   -
585   - The entries in /dev/pts/ are created on the fly by a virtual
586   - file system; therefore, if you say Y here you should say Y to
587   - "/dev/pts file system for Unix98 PTYs" as well.
588   -
589   - If you want to say Y here, you need to have the C library glibc 2.1
590   - or later (equal to libc-6.1, check with "ls -l /lib/libc.so.*").
591   - Read the instructions in <file:Documentation/Changes> pertaining to
592   - pseudo terminals. It's safe to say N.
593   -
594   -config UNIX98_PTY_COUNT
595   - int "Maximum number of Unix98 PTYs in use (0-2048)"
596   - depends on UNIX98_PTYS
597   - default "256"
598   - help
599   - The maximum number of Unix98 PTYs that can be used at any one time.
600   - The default is 256, and should be enough for desktop systems. Server
601   - machines which support incoming telnet/rlogin/ssh connections and/or
602   - serve several X terminals may want to increase this: every incoming
603   - connection and every xterm uses up one PTY.
604   -
605   - When not in use, each additional set of 256 PTYs occupy
606   - approximately 8 KB of kernel memory on 32-bit architectures.
607   -
608   -endmenu
609   -
610   -menu "XFree86 DRI support"
611   -
612   -config DRM
613   - bool "Direct Rendering Manager (XFree86 DRI support)"
614   - help
615   - Kernel-level support for the Direct Rendering Infrastructure (DRI)
616   - introduced in XFree86 4.0. If you say Y here, you need to select
617   - the module that's right for your graphics card from the list below.
618   - These modules provide support for synchronization, security, and
619   - DMA transfers. Please see <http://dri.sourceforge.net/> for more
620   - details. You should also select and configure AGP
621   - (/dev/agpgart) support.
622   -
623   -config DRM_FFB
624   - tristate "Creator/Creator3D"
625   - depends on DRM && BROKEN
626   - help
627   - Choose this option if you have one of Sun's Creator3D-based graphics
628   - and frame buffer cards. Product page at
629   - <http://www.sun.com/desktop/products/Graphics/creator3d.html>.
630   -
631   -config DRM_TDFX
632   - tristate "3dfx Banshee/Voodoo3+"
633   - depends on DRM
634   - help
635   - Choose this option if you have a 3dfx Banshee or Voodoo3 (or later),
636   - graphics card. If M is selected, the module will be called tdfx.
637   -
638   -config DRM_R128
639   - tristate "ATI Rage 128"
640   - depends on DRM
641   - help
642   - Choose this option if you have an ATI Rage 128 graphics card. If M
643   - is selected, the module will be called r128. AGP support for
644   - this card is strongly suggested (unless you have a PCI version).
645   -
646   -endmenu
647   -
648   -source "drivers/input/Kconfig"
649   -
650   -source "drivers/i2c/Kconfig"
651   -
652   -source "drivers/hwmon/Kconfig"
653   -
654 376 source "fs/Kconfig"
655   -
656   -source "drivers/media/Kconfig"
657   -
658   -source "sound/Kconfig"
659   -
660   -source "drivers/usb/Kconfig"
661   -
662   -source "drivers/infiniband/Kconfig"
663   -
664   -source "drivers/char/watchdog/Kconfig"
665 377  
666 378 source "arch/sparc64/oprofile/Kconfig"
667 379  
arch/sparc64/kernel/entry.S
... ... @@ -927,139 +927,6 @@
927 927 ba,pt %xcc, rtrap
928 928 clr %l6
929 929  
930   - /* Capture I/D/E-cache state into per-cpu error scoreboard.
931   - *
932   - * %g1: (TL>=0) ? 1 : 0
933   - * %g2: scratch
934   - * %g3: scratch
935   - * %g4: AFSR
936   - * %g5: AFAR
937   - * %g6: current thread ptr
938   - * %g7: scratch
939   - */
940   -#define CHEETAH_LOG_ERROR \
941   - /* Put "TL1" software bit into AFSR. */ \
942   - and %g1, 0x1, %g1; \
943   - sllx %g1, 63, %g2; \
944   - or %g4, %g2, %g4; \
945   - /* Get log entry pointer for this cpu at this trap level. */ \
946   - BRANCH_IF_JALAPENO(g2,g3,50f) \
947   - ldxa [%g0] ASI_SAFARI_CONFIG, %g2; \
948   - srlx %g2, 17, %g2; \
949   - ba,pt %xcc, 60f; \
950   - and %g2, 0x3ff, %g2; \
951   -50: ldxa [%g0] ASI_JBUS_CONFIG, %g2; \
952   - srlx %g2, 17, %g2; \
953   - and %g2, 0x1f, %g2; \
954   -60: sllx %g2, 9, %g2; \
955   - sethi %hi(cheetah_error_log), %g3; \
956   - ldx [%g3 + %lo(cheetah_error_log)], %g3; \
957   - brz,pn %g3, 80f; \
958   - nop; \
959   - add %g3, %g2, %g3; \
960   - sllx %g1, 8, %g1; \
961   - add %g3, %g1, %g1; \
962   - /* %g1 holds pointer to the top of the logging scoreboard */ \
963   - ldx [%g1 + 0x0], %g7; \
964   - cmp %g7, -1; \
965   - bne,pn %xcc, 80f; \
966   - nop; \
967   - stx %g4, [%g1 + 0x0]; \
968   - stx %g5, [%g1 + 0x8]; \
969   - add %g1, 0x10, %g1; \
970   - /* %g1 now points to D-cache logging area */ \
971   - set 0x3ff8, %g2; /* DC_addr mask */ \
972   - and %g5, %g2, %g2; /* DC_addr bits of AFAR */ \
973   - srlx %g5, 12, %g3; \
974   - or %g3, 1, %g3; /* PHYS tag + valid */ \
975   -10: ldxa [%g2] ASI_DCACHE_TAG, %g7; \
976   - cmp %g3, %g7; /* TAG match? */ \
977   - bne,pt %xcc, 13f; \
978   - nop; \
979   - /* Yep, what we want, capture state. */ \
980   - stx %g2, [%g1 + 0x20]; \
981   - stx %g7, [%g1 + 0x28]; \
982   - /* A membar Sync is required before and after utag access. */ \
983   - membar #Sync; \
984   - ldxa [%g2] ASI_DCACHE_UTAG, %g7; \
985   - membar #Sync; \
986   - stx %g7, [%g1 + 0x30]; \
987   - ldxa [%g2] ASI_DCACHE_SNOOP_TAG, %g7; \
988   - stx %g7, [%g1 + 0x38]; \
989   - clr %g3; \
990   -12: ldxa [%g2 + %g3] ASI_DCACHE_DATA, %g7; \
991   - stx %g7, [%g1]; \
992   - add %g3, (1 << 5), %g3; \
993   - cmp %g3, (4 << 5); \
994   - bl,pt %xcc, 12b; \
995   - add %g1, 0x8, %g1; \
996   - ba,pt %xcc, 20f; \
997   - add %g1, 0x20, %g1; \
998   -13: sethi %hi(1 << 14), %g7; \
999   - add %g2, %g7, %g2; \
1000   - srlx %g2, 14, %g7; \
1001   - cmp %g7, 4; \
1002   - bl,pt %xcc, 10b; \
1003   - nop; \
1004   - add %g1, 0x40, %g1; \
1005   -20: /* %g1 now points to I-cache logging area */ \
1006   - set 0x1fe0, %g2; /* IC_addr mask */ \
1007   - and %g5, %g2, %g2; /* IC_addr bits of AFAR */ \
1008   - sllx %g2, 1, %g2; /* IC_addr[13:6]==VA[12:5] */ \
1009   - srlx %g5, (13 - 8), %g3; /* Make PTAG */ \
1010   - andn %g3, 0xff, %g3; /* Mask off undefined bits */ \
1011   -21: ldxa [%g2] ASI_IC_TAG, %g7; \
1012   - andn %g7, 0xff, %g7; \
1013   - cmp %g3, %g7; \
1014   - bne,pt %xcc, 23f; \
1015   - nop; \
1016   - /* Yep, what we want, capture state. */ \
1017   - stx %g2, [%g1 + 0x40]; \
1018   - stx %g7, [%g1 + 0x48]; \
1019   - add %g2, (1 << 3), %g2; \
1020   - ldxa [%g2] ASI_IC_TAG, %g7; \
1021   - add %g2, (1 << 3), %g2; \
1022   - stx %g7, [%g1 + 0x50]; \
1023   - ldxa [%g2] ASI_IC_TAG, %g7; \
1024   - add %g2, (1 << 3), %g2; \
1025   - stx %g7, [%g1 + 0x60]; \
1026   - ldxa [%g2] ASI_IC_TAG, %g7; \
1027   - stx %g7, [%g1 + 0x68]; \
1028   - sub %g2, (3 << 3), %g2; \
1029   - ldxa [%g2] ASI_IC_STAG, %g7; \
1030   - stx %g7, [%g1 + 0x58]; \
1031   - clr %g3; \
1032   - srlx %g2, 2, %g2; \
1033   -22: ldxa [%g2 + %g3] ASI_IC_INSTR, %g7; \
1034   - stx %g7, [%g1]; \
1035   - add %g3, (1 << 3), %g3; \
1036   - cmp %g3, (8 << 3); \
1037   - bl,pt %xcc, 22b; \
1038   - add %g1, 0x8, %g1; \
1039   - ba,pt %xcc, 30f; \
1040   - add %g1, 0x30, %g1; \
1041   -23: sethi %hi(1 << 14), %g7; \
1042   - add %g2, %g7, %g2; \
1043   - srlx %g2, 14, %g7; \
1044   - cmp %g7, 4; \
1045   - bl,pt %xcc, 21b; \
1046   - nop; \
1047   - add %g1, 0x70, %g1; \
1048   -30: /* %g1 now points to E-cache logging area */ \
1049   - andn %g5, (32 - 1), %g2; /* E-cache subblock */ \
1050   - stx %g2, [%g1 + 0x20]; \
1051   - ldxa [%g2] ASI_EC_TAG_DATA, %g7; \
1052   - stx %g7, [%g1 + 0x28]; \
1053   - ldxa [%g2] ASI_EC_R, %g0; \
1054   - clr %g3; \
1055   -31: ldxa [%g3] ASI_EC_DATA, %g7; \
1056   - stx %g7, [%g1 + %g3]; \
1057   - add %g3, 0x8, %g3; \
1058   - cmp %g3, 0x20; \
1059   - bl,pt %xcc, 31b; \
1060   - nop; \
1061   -80: /* DONE */
1062   -
1063 930 /* These get patched into the trap table at boot time
1064 931 * once we know we have a cheetah processor.
1065 932 */
... ... @@ -1296,6 +1163,170 @@
1296 1163 membar #Sync
1297 1164 retry
1298 1165  
  1166 + /* Capture I/D/E-cache state into per-cpu error scoreboard.
  1167 + *
  1168 + * %g1: (TL>=0) ? 1 : 0
  1169 + * %g2: scratch
  1170 + * %g3: scratch
  1171 + * %g4: AFSR
  1172 + * %g5: AFAR
  1173 + * %g6: current thread ptr
  1174 + * %g7: scratch
  1175 + */
  1176 +__cheetah_log_error:
  1177 + /* Put "TL1" software bit into AFSR. */
  1178 + and %g1, 0x1, %g1
  1179 + sllx %g1, 63, %g2
  1180 + or %g4, %g2, %g4
  1181 +
  1182 + /* Get log entry pointer for this cpu at this trap level. */
  1183 + BRANCH_IF_JALAPENO(g2,g3,50f)
  1184 + ldxa [%g0] ASI_SAFARI_CONFIG, %g2
  1185 + srlx %g2, 17, %g2
  1186 + ba,pt %xcc, 60f
  1187 + and %g2, 0x3ff, %g2
  1188 +
  1189 +50: ldxa [%g0] ASI_JBUS_CONFIG, %g2
  1190 + srlx %g2, 17, %g2
  1191 + and %g2, 0x1f, %g2
  1192 +
  1193 +60: sllx %g2, 9, %g2
  1194 + sethi %hi(cheetah_error_log), %g3
  1195 + ldx [%g3 + %lo(cheetah_error_log)], %g3
  1196 + brz,pn %g3, 80f
  1197 + nop
  1198 +
  1199 + add %g3, %g2, %g3
  1200 + sllx %g1, 8, %g1
  1201 + add %g3, %g1, %g1
  1202 +
  1203 + /* %g1 holds pointer to the top of the logging scoreboard */
  1204 + ldx [%g1 + 0x0], %g7
  1205 + cmp %g7, -1
  1206 + bne,pn %xcc, 80f
  1207 + nop
  1208 +
  1209 + stx %g4, [%g1 + 0x0]
  1210 + stx %g5, [%g1 + 0x8]
  1211 + add %g1, 0x10, %g1
  1212 +
  1213 + /* %g1 now points to D-cache logging area */
  1214 + set 0x3ff8, %g2 /* DC_addr mask */
  1215 + and %g5, %g2, %g2 /* DC_addr bits of AFAR */
  1216 + srlx %g5, 12, %g3
  1217 + or %g3, 1, %g3 /* PHYS tag + valid */
  1218 +
  1219 +10: ldxa [%g2] ASI_DCACHE_TAG, %g7
  1220 + cmp %g3, %g7 /* TAG match? */
  1221 + bne,pt %xcc, 13f
  1222 + nop
  1223 +
  1224 + /* Yep, what we want, capture state. */
  1225 + stx %g2, [%g1 + 0x20]
  1226 + stx %g7, [%g1 + 0x28]
  1227 +
  1228 + /* A membar Sync is required before and after utag access. */
  1229 + membar #Sync
  1230 + ldxa [%g2] ASI_DCACHE_UTAG, %g7
  1231 + membar #Sync
  1232 + stx %g7, [%g1 + 0x30]
  1233 + ldxa [%g2] ASI_DCACHE_SNOOP_TAG, %g7
  1234 + stx %g7, [%g1 + 0x38]
  1235 + clr %g3
  1236 +
  1237 +12: ldxa [%g2 + %g3] ASI_DCACHE_DATA, %g7
  1238 + stx %g7, [%g1]
  1239 + add %g3, (1 << 5), %g3
  1240 + cmp %g3, (4 << 5)
  1241 + bl,pt %xcc, 12b
  1242 + add %g1, 0x8, %g1
  1243 +
  1244 + ba,pt %xcc, 20f
  1245 + add %g1, 0x20, %g1
  1246 +
  1247 +13: sethi %hi(1 << 14), %g7
  1248 + add %g2, %g7, %g2
  1249 + srlx %g2, 14, %g7
  1250 + cmp %g7, 4
  1251 + bl,pt %xcc, 10b
  1252 + nop
  1253 +
  1254 + add %g1, 0x40, %g1
  1255 +
  1256 + /* %g1 now points to I-cache logging area */
  1257 +20: set 0x1fe0, %g2 /* IC_addr mask */
  1258 + and %g5, %g2, %g2 /* IC_addr bits of AFAR */
  1259 + sllx %g2, 1, %g2 /* IC_addr[13:6]==VA[12:5] */
  1260 + srlx %g5, (13 - 8), %g3 /* Make PTAG */
  1261 + andn %g3, 0xff, %g3 /* Mask off undefined bits */
  1262 +
  1263 +21: ldxa [%g2] ASI_IC_TAG, %g7
  1264 + andn %g7, 0xff, %g7
  1265 + cmp %g3, %g7
  1266 + bne,pt %xcc, 23f
  1267 + nop
  1268 +
  1269 + /* Yep, what we want, capture state. */
  1270 + stx %g2, [%g1 + 0x40]
  1271 + stx %g7, [%g1 + 0x48]
  1272 + add %g2, (1 << 3), %g2
  1273 + ldxa [%g2] ASI_IC_TAG, %g7
  1274 + add %g2, (1 << 3), %g2
  1275 + stx %g7, [%g1 + 0x50]
  1276 + ldxa [%g2] ASI_IC_TAG, %g7
  1277 + add %g2, (1 << 3), %g2
  1278 + stx %g7, [%g1 + 0x60]
  1279 + ldxa [%g2] ASI_IC_TAG, %g7
  1280 + stx %g7, [%g1 + 0x68]
  1281 + sub %g2, (3 << 3), %g2
  1282 + ldxa [%g2] ASI_IC_STAG, %g7
  1283 + stx %g7, [%g1 + 0x58]
  1284 + clr %g3
  1285 + srlx %g2, 2, %g2
  1286 +
  1287 +22: ldxa [%g2 + %g3] ASI_IC_INSTR, %g7
  1288 + stx %g7, [%g1]
  1289 + add %g3, (1 << 3), %g3
  1290 + cmp %g3, (8 << 3)
  1291 + bl,pt %xcc, 22b
  1292 + add %g1, 0x8, %g1
  1293 +
  1294 + ba,pt %xcc, 30f
  1295 + add %g1, 0x30, %g1
  1296 +
  1297 +23: sethi %hi(1 << 14), %g7
  1298 + add %g2, %g7, %g2
  1299 + srlx %g2, 14, %g7
  1300 + cmp %g7, 4
  1301 + bl,pt %xcc, 21b
  1302 + nop
  1303 +
  1304 + add %g1, 0x70, %g1
  1305 +
  1306 + /* %g1 now points to E-cache logging area */
  1307 +30: andn %g5, (32 - 1), %g2
  1308 + stx %g2, [%g1 + 0x20]
  1309 + ldxa [%g2] ASI_EC_TAG_DATA, %g7
  1310 + stx %g7, [%g1 + 0x28]
  1311 + ldxa [%g2] ASI_EC_R, %g0
  1312 + clr %g3
  1313 +
  1314 +31: ldxa [%g3] ASI_EC_DATA, %g7
  1315 + stx %g7, [%g1 + %g3]
  1316 + add %g3, 0x8, %g3
  1317 + cmp %g3, 0x20
  1318 +
  1319 + bl,pt %xcc, 31b
  1320 + nop
  1321 +80:
  1322 + rdpr %tt, %g2
  1323 + cmp %g2, 0x70
  1324 + be c_fast_ecc
  1325 + cmp %g2, 0x63
  1326 + be c_cee
  1327 + nop
  1328 + ba,pt %xcc, c_deferred
  1329 +
1299 1330 /* Cheetah FECC trap handling, we get here from tl{0,1}_fecc
1300 1331 * in the trap table. That code has done a memory barrier
1301 1332 * and has disabled both the I-cache and D-cache in the DCU
1302 1333  
... ... @@ -1321,8 +1352,10 @@
1321 1352 stxa %g4, [%g0] ASI_AFSR
1322 1353 membar #Sync
1323 1354  
1324   - CHEETAH_LOG_ERROR
  1355 + ba,pt %xcc, __cheetah_log_error
  1356 + nop
1325 1357  
  1358 +c_fast_ecc:
1326 1359 rdpr %pil, %g2
1327 1360 wrpr %g0, 15, %pil
1328 1361 ba,pt %xcc, etrap_irq
1329 1362  
... ... @@ -1347,8 +1380,10 @@
1347 1380 stxa %g4, [%g0] ASI_AFSR
1348 1381 membar #Sync
1349 1382  
1350   - CHEETAH_LOG_ERROR
  1383 + ba,pt %xcc, __cheetah_log_error
  1384 + nop
1351 1385  
  1386 +c_cee:
1352 1387 rdpr %pil, %g2
1353 1388 wrpr %g0, 15, %pil
1354 1389 ba,pt %xcc, etrap_irq
1355 1390  
... ... @@ -1373,8 +1408,10 @@
1373 1408 stxa %g4, [%g0] ASI_AFSR
1374 1409 membar #Sync
1375 1410  
1376   - CHEETAH_LOG_ERROR
  1411 + ba,pt %xcc, __cheetah_log_error
  1412 + nop
1377 1413  
  1414 +c_deferred:
1378 1415 rdpr %pil, %g2
1379 1416 wrpr %g0, 15, %pil
1380 1417 ba,pt %xcc, etrap_irq
arch/sparc64/kernel/head.S
... ... @@ -538,10 +538,11 @@
538 538 nop
539 539 call cheetah_plus_patch_winfixup
540 540 nop
541   -
542 541  
543 542 2: /* Patch copy/page operations to cheetah optimized versions. */
544 543 call cheetah_patch_copyops
  544 + nop
  545 + call cheetah_patch_copy_page
545 546 nop
546 547 call cheetah_patch_cachetlbops
547 548 nop
arch/sparc64/kernel/pci.c
... ... @@ -736,8 +736,7 @@
736 736 static void __pci_mmap_set_pgprot(struct pci_dev *dev, struct vm_area_struct *vma,
737 737 enum pci_mmap_state mmap_state)
738 738 {
739   - /* Our io_remap_page_range/io_remap_pfn_range takes care of this,
740   - do nothing. */
  739 + /* Our io_remap_pfn_range takes care of this, do nothing. */
741 740 }
742 741  
743 742 /* Perform the actual remap of the pages for a PCI device mapping, as appropriate
arch/sparc64/kernel/rtrap.S
... ... @@ -153,11 +153,14 @@
153 153 rtrap_irq:
154 154 rtrap_clr_l6: clr %l6
155 155 rtrap:
156   - ldub [%g6 + TI_CPU], %l0
157   - sethi %hi(irq_stat), %l2 ! &softirq_active
158   - or %l2, %lo(irq_stat), %l2 ! &softirq_active
159   -irqsz_patchme: sllx %l0, 0, %l0
160   - lduw [%l2 + %l0], %l1 ! softirq_pending
  156 +#ifndef CONFIG_SMP
  157 + sethi %hi(per_cpu____cpu_data), %l0
  158 + lduw [%l0 + %lo(per_cpu____cpu_data)], %l1
  159 +#else
  160 + sethi %hi(per_cpu____cpu_data), %l0
  161 + or %l0, %lo(per_cpu____cpu_data), %l0
  162 + lduw [%l0 + %g5], %l1
  163 +#endif
161 164 cmp %l1, 0
162 165  
163 166 /* mm/ultra.S:xcall_report_regs KNOWS about this load. */
arch/sparc64/kernel/setup.c
... ... @@ -511,18 +511,6 @@
511 511 conswitchp = &prom_con;
512 512 #endif
513 513  
514   -#ifdef CONFIG_SMP
515   - i = (unsigned long)&irq_stat[1] - (unsigned long)&irq_stat[0];
516   - if ((i == SMP_CACHE_BYTES) || (i == (2 * SMP_CACHE_BYTES))) {
517   - extern unsigned int irqsz_patchme[1];
518   - irqsz_patchme[0] |= ((i == SMP_CACHE_BYTES) ? SMP_CACHE_BYTES_SHIFT : \
519   - SMP_CACHE_BYTES_SHIFT + 1);
520   - flushi((long)&irqsz_patchme[0]);
521   - } else {
522   - prom_printf("Unexpected size of irq_stat[] elements\n");
523   - prom_halt();
524   - }
525   -#endif
526 514 /* Work out if we are starfire early on */
527 515 check_if_starfire();
528 516  
arch/sparc64/kernel/sparc64_ksyms.c
... ... @@ -88,8 +88,6 @@
88 88 extern int compat_sys_ioctl(unsigned int fd, unsigned int cmd, u32 arg);
89 89 extern int (*handle_mathemu)(struct pt_regs *, struct fpustate *);
90 90 extern long sparc32_open(const char __user * filename, int flags, int mode);
91   -extern int io_remap_page_range(struct vm_area_struct *vma, unsigned long from,
92   - unsigned long offset, unsigned long size, pgprot_t prot, int space);
93 91 extern int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
94 92 unsigned long pfn, unsigned long size, pgprot_t prot);
95 93 extern void (*prom_palette)(int);
... ... @@ -245,7 +243,6 @@
245 243 #endif
246 244  
247 245 /* I/O device mmaping on Sparc64. */
248   -EXPORT_SYMBOL(io_remap_page_range);
249 246 EXPORT_SYMBOL(io_remap_pfn_range);
250 247  
251 248 /* Solaris/SunOS binary compatibility */
arch/sparc64/lib/PeeCeeI.c
... ... @@ -7,28 +7,31 @@
7 7 #include <asm/io.h>
8 8 #include <asm/byteorder.h>
9 9  
10   -void outsb(void __iomem *addr, const void *src, unsigned long count)
  10 +void outsb(unsigned long __addr, const void *src, unsigned long count)
11 11 {
  12 + void __iomem *addr = (void __iomem *) __addr;
12 13 const u8 *p = src;
13 14  
14   - while(count--)
  15 + while (count--)
15 16 outb(*p++, addr);
16 17 }
17 18  
18   -void outsw(void __iomem *addr, const void *src, unsigned long count)
  19 +void outsw(unsigned long __addr, const void *src, unsigned long count)
19 20 {
20   - if(count) {
  21 + void __iomem *addr = (void __iomem *) __addr;
  22 +
  23 + if (count) {
21 24 u16 *ps = (u16 *)src;
22 25 u32 *pi;
23 26  
24   - if(((u64)src) & 0x2) {
  27 + if (((u64)src) & 0x2) {
25 28 u16 val = le16_to_cpup(ps);
26 29 outw(val, addr);
27 30 ps++;
28 31 count--;
29 32 }
30 33 pi = (u32 *)ps;
31   - while(count >= 2) {
  34 + while (count >= 2) {
32 35 u32 w = le32_to_cpup(pi);
33 36  
34 37 pi++;
35 38  
36 39  
37 40  
... ... @@ -37,19 +40,21 @@
37 40 count -= 2;
38 41 }
39 42 ps = (u16 *)pi;
40   - if(count) {
  43 + if (count) {
41 44 u16 val = le16_to_cpup(ps);
42 45 outw(val, addr);
43 46 }
44 47 }
45 48 }
46 49  
47   -void outsl(void __iomem *addr, const void *src, unsigned long count)
  50 +void outsl(unsigned long __addr, const void *src, unsigned long count)
48 51 {
49   - if(count) {
50   - if((((u64)src) & 0x3) == 0) {
  52 + void __iomem *addr = (void __iomem *) __addr;
  53 +
  54 + if (count) {
  55 + if ((((u64)src) & 0x3) == 0) {
51 56 u32 *p = (u32 *)src;
52   - while(count--) {
  57 + while (count--) {
53 58 u32 val = cpu_to_le32p(p);
54 59 outl(val, addr);
55 60 p++;
56 61  
... ... @@ -60,13 +65,13 @@
60 65 u32 l = 0, l2;
61 66 u32 *pi;
62 67  
63   - switch(((u64)src) & 0x3) {
  68 + switch (((u64)src) & 0x3) {
64 69 case 0x2:
65 70 count -= 1;
66 71 l = cpu_to_le16p(ps) << 16;
67 72 ps++;
68 73 pi = (u32 *)ps;
69   - while(count--) {
  74 + while (count--) {
70 75 l2 = cpu_to_le32p(pi);
71 76 pi++;
72 77 outl(((l >> 16) | (l2 << 16)), addr);
... ... @@ -86,7 +91,7 @@
86 91 ps++;
87 92 l |= (l2 << 16);
88 93 pi = (u32 *)ps;
89   - while(count--) {
  94 + while (count--) {
90 95 l2 = cpu_to_le32p(pi);
91 96 pi++;
92 97 outl(((l >> 8) | (l2 << 24)), addr);
... ... @@ -101,7 +106,7 @@
101 106 pb = (u8 *)src;
102 107 l = (*pb++ << 24);
103 108 pi = (u32 *)pb;
104   - while(count--) {
  109 + while (count--) {
105 110 l2 = cpu_to_le32p(pi);
106 111 pi++;
107 112 outl(((l >> 24) | (l2 << 8)), addr);
108 113  
109 114  
110 115  
... ... @@ -119,16 +124,18 @@
119 124 }
120 125 }
121 126  
122   -void insb(void __iomem *addr, void *dst, unsigned long count)
  127 +void insb(unsigned long __addr, void *dst, unsigned long count)
123 128 {
124   - if(count) {
  129 + void __iomem *addr = (void __iomem *) __addr;
  130 +
  131 + if (count) {
125 132 u32 *pi;
126 133 u8 *pb = dst;
127 134  
128   - while((((unsigned long)pb) & 0x3) && count--)
  135 + while ((((unsigned long)pb) & 0x3) && count--)
129 136 *pb++ = inb(addr);
130 137 pi = (u32 *)pb;
131   - while(count >= 4) {
  138 + while (count >= 4) {
132 139 u32 w;
133 140  
134 141 w = (inb(addr) << 24);
135 142  
136 143  
137 144  
138 145  
... ... @@ -139,23 +146,25 @@
139 146 count -= 4;
140 147 }
141 148 pb = (u8 *)pi;
142   - while(count--)
  149 + while (count--)
143 150 *pb++ = inb(addr);
144 151 }
145 152 }
146 153  
147   -void insw(void __iomem *addr, void *dst, unsigned long count)
  154 +void insw(unsigned long __addr, void *dst, unsigned long count)
148 155 {
149   - if(count) {
  156 + void __iomem *addr = (void __iomem *) __addr;
  157 +
  158 + if (count) {
150 159 u16 *ps = dst;
151 160 u32 *pi;
152 161  
153   - if(((unsigned long)ps) & 0x2) {
  162 + if (((unsigned long)ps) & 0x2) {
154 163 *ps++ = le16_to_cpu(inw(addr));
155 164 count--;
156 165 }
157 166 pi = (u32 *)ps;
158   - while(count >= 2) {
  167 + while (count >= 2) {
159 168 u32 w;
160 169  
161 170 w = (le16_to_cpu(inw(addr)) << 16);
162 171  
163 172  
164 173  
165 174  
166 175  
... ... @@ -164,31 +173,33 @@
164 173 count -= 2;
165 174 }
166 175 ps = (u16 *)pi;
167   - if(count)
  176 + if (count)
168 177 *ps = le16_to_cpu(inw(addr));
169 178 }
170 179 }
171 180  
172   -void insl(void __iomem *addr, void *dst, unsigned long count)
  181 +void insl(unsigned long __addr, void *dst, unsigned long count)
173 182 {
174   - if(count) {
175   - if((((unsigned long)dst) & 0x3) == 0) {
  183 + void __iomem *addr = (void __iomem *) __addr;
  184 +
  185 + if (count) {
  186 + if ((((unsigned long)dst) & 0x3) == 0) {
176 187 u32 *pi = dst;
177   - while(count--)
  188 + while (count--)
178 189 *pi++ = le32_to_cpu(inl(addr));
179 190 } else {
180 191 u32 l = 0, l2, *pi;
181 192 u16 *ps;
182 193 u8 *pb;
183 194  
184   - switch(((unsigned long)dst) & 3) {
  195 + switch (((unsigned long)dst) & 3) {
185 196 case 0x2:
186 197 ps = dst;
187 198 count -= 1;
188 199 l = le32_to_cpu(inl(addr));
189 200 *ps++ = l;
190 201 pi = (u32 *)ps;
191   - while(count--) {
  202 + while (count--) {
192 203 l2 = le32_to_cpu(inl(addr));
193 204 *pi++ = (l << 16) | (l2 >> 16);
194 205 l = l2;
... ... @@ -205,7 +216,7 @@
205 216 ps = (u16 *)pb;
206 217 *ps++ = ((l >> 8) & 0xffff);
207 218 pi = (u32 *)ps;
208   - while(count--) {
  219 + while (count--) {
209 220 l2 = le32_to_cpu(inl(addr));
210 221 *pi++ = (l << 24) | (l2 >> 8);
211 222 l = l2;
... ... @@ -220,7 +231,7 @@
220 231 l = le32_to_cpu(inl(addr));
221 232 *pb++ = l >> 24;
222 233 pi = (u32 *)pb;
223   - while(count--) {
  234 + while (count--) {
224 235 l2 = le32_to_cpu(inl(addr));
225 236 *pi++ = (l << 8) | (l2 >> 24);
226 237 l = l2;
arch/sparc64/lib/copy_page.S
... ... @@ -87,7 +87,7 @@
87 87 membar #Sync
88 88 wrpr %o2, 0x0, %pstate
89 89  
90   - BRANCH_IF_ANY_CHEETAH(g3,o2,1f)
  90 +cheetah_copy_page_insn:
91 91 ba,pt %xcc, 9f
92 92 nop
93 93  
... ... @@ -240,4 +240,15 @@
240 240 stw %o4, [%g6 + TI_PRE_COUNT]
241 241  
242 242 .size copy_user_page, .-copy_user_page
  243 +
  244 + .globl cheetah_patch_copy_page
  245 +cheetah_patch_copy_page:
  246 + sethi %hi(0x01000000), %o1 ! NOP
  247 + sethi %hi(cheetah_copy_page_insn), %o0
  248 + or %o0, %lo(cheetah_copy_page_insn), %o0
  249 + stw %o1, [%o0]
  250 + membar #StoreStore
  251 + flush %o0
  252 + retl
  253 + nop
arch/sparc64/mm/generic.c
... ... @@ -116,37 +116,6 @@
116 116 return 0;
117 117 }
118 118  
119   -int io_remap_page_range(struct vm_area_struct *vma, unsigned long from, unsigned long offset, unsigned long size, pgprot_t prot, int space)
120   -{
121   - int error = 0;
122   - pgd_t * dir;
123   - unsigned long beg = from;
124   - unsigned long end = from + size;
125   - struct mm_struct *mm = vma->vm_mm;
126   -
127   - prot = __pgprot(pg_iobits);
128   - offset -= from;
129   - dir = pgd_offset(mm, from);
130   - flush_cache_range(vma, beg, end);
131   -
132   - spin_lock(&mm->page_table_lock);
133   - while (from < end) {
134   - pud_t *pud = pud_alloc(mm, dir, from);
135   - error = -ENOMEM;
136   - if (!pud)
137   - break;
138   - error = io_remap_pud_range(mm, pud, from, end - from, offset + from, prot, space);
139   - if (error)
140   - break;
141   - from = (from + PGDIR_SIZE) & PGDIR_MASK;
142   - dir++;
143   - }
144   - flush_tlb_range(vma, beg, end);
145   - spin_unlock(&mm->page_table_lock);
146   -
147   - return error;
148   -}
149   -
150 119 int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
151 120 unsigned long pfn, unsigned long size, pgprot_t prot)
152 121 {
arch/sparc64/mm/ultra.S
... ... @@ -10,6 +10,7 @@
10 10 #include <asm/page.h>
11 11 #include <asm/spitfire.h>
12 12 #include <asm/mmu_context.h>
  13 +#include <asm/mmu.h>
13 14 #include <asm/pil.h>
14 15 #include <asm/head.h>
15 16 #include <asm/thread_info.h>
... ... @@ -45,6 +46,8 @@
45 46 nop
46 47 nop
47 48 nop
  49 + nop
  50 + nop
48 51  
49 52 .align 32
50 53 .globl __flush_tlb_pending
... ... @@ -73,6 +76,9 @@
73 76 retl
74 77 wrpr %g7, 0x0, %pstate
75 78 nop
  79 + nop
  80 + nop
  81 + nop
76 82  
77 83 .align 32
78 84 .globl __flush_tlb_kernel_range
... ... @@ -224,16 +230,8 @@
224 230 or %o5, %o0, %o5
225 231 ba,a,pt %xcc, __prefill_itlb
226 232  
227   - /* Cheetah specific versions, patched at boot time.
228   - *
229   - * This writes of the PRIMARY_CONTEXT register in this file are
230   - * safe even on Cheetah+ and later wrt. the page size fields.
231   - * The nucleus page size fields do not matter because we make
232   - * no data references, and these instructions execute out of a
233   - * locked I-TLB entry sitting in the fully assosciative I-TLB.
234   - * This sequence should also never trap.
235   - */
236   -__cheetah_flush_tlb_mm: /* 15 insns */
  233 + /* Cheetah specific versions, patched at boot time. */
  234 +__cheetah_flush_tlb_mm: /* 18 insns */
237 235 rdpr %pstate, %g7
238 236 andn %g7, PSTATE_IE, %g2
239 237 wrpr %g2, 0x0, %pstate
... ... @@ -241,6 +239,9 @@
241 239 mov PRIMARY_CONTEXT, %o2
242 240 mov 0x40, %g3
243 241 ldxa [%o2] ASI_DMMU, %g2
  242 + srlx %g2, CTX_PGSZ1_NUC_SHIFT, %o1
  243 + sllx %o1, CTX_PGSZ1_NUC_SHIFT, %o1
  244 + or %o0, %o1, %o0 /* Preserve nucleus page size fields */
244 245 stxa %o0, [%o2] ASI_DMMU
245 246 stxa %g0, [%g3] ASI_DMMU_DEMAP
246 247 stxa %g0, [%g3] ASI_IMMU_DEMAP
... ... @@ -250,7 +251,7 @@
250 251 retl
251 252 wrpr %g7, 0x0, %pstate
252 253  
253   -__cheetah_flush_tlb_pending: /* 23 insns */
  254 +__cheetah_flush_tlb_pending: /* 26 insns */
254 255 /* %o0 = context, %o1 = nr, %o2 = vaddrs[] */
255 256 rdpr %pstate, %g7
256 257 sllx %o1, 3, %o1
... ... @@ -259,6 +260,9 @@
259 260 wrpr %g0, 1, %tl
260 261 mov PRIMARY_CONTEXT, %o4
261 262 ldxa [%o4] ASI_DMMU, %g2
  263 + srlx %g2, CTX_PGSZ1_NUC_SHIFT, %o3
  264 + sllx %o3, CTX_PGSZ1_NUC_SHIFT, %o3
  265 + or %o0, %o3, %o0 /* Preserve nucleus page size fields */
262 266 stxa %o0, [%o4] ASI_DMMU
263 267 1: sub %o1, (1 << 3), %o1
264 268 ldx [%o2 + %o1], %o3
265 269  
... ... @@ -311,14 +315,14 @@
311 315 sethi %hi(__cheetah_flush_tlb_mm), %o1
312 316 or %o1, %lo(__cheetah_flush_tlb_mm), %o1
313 317 call cheetah_patch_one
314   - mov 15, %o2
  318 + mov 18, %o2
315 319  
316 320 sethi %hi(__flush_tlb_pending), %o0
317 321 or %o0, %lo(__flush_tlb_pending), %o0
318 322 sethi %hi(__cheetah_flush_tlb_pending), %o1
319 323 or %o1, %lo(__cheetah_flush_tlb_pending), %o1
320 324 call cheetah_patch_one
321   - mov 23, %o2
  325 + mov 26, %o2
322 326  
323 327 #ifdef DCACHE_ALIASING_POSSIBLE
324 328 sethi %hi(__flush_dcache_page), %o0
325 329  
326 330  
... ... @@ -352,9 +356,12 @@
352 356 .globl xcall_flush_tlb_mm
353 357 xcall_flush_tlb_mm:
354 358 mov PRIMARY_CONTEXT, %g2
355   - mov 0x40, %g4
356 359 ldxa [%g2] ASI_DMMU, %g3
  360 + srlx %g3, CTX_PGSZ1_NUC_SHIFT, %g4
  361 + sllx %g4, CTX_PGSZ1_NUC_SHIFT, %g4
  362 + or %g5, %g4, %g5 /* Preserve nucleus page size fields */
357 363 stxa %g5, [%g2] ASI_DMMU
  364 + mov 0x40, %g4
358 365 stxa %g0, [%g4] ASI_DMMU_DEMAP
359 366 stxa %g0, [%g4] ASI_IMMU_DEMAP
360 367 stxa %g3, [%g2] ASI_DMMU
... ... @@ -366,6 +373,10 @@
366 373 sllx %g1, 3, %g1
367 374 mov PRIMARY_CONTEXT, %g4
368 375 ldxa [%g4] ASI_DMMU, %g2
  376 + srlx %g2, CTX_PGSZ1_NUC_SHIFT, %g4
  377 + sllx %g4, CTX_PGSZ1_NUC_SHIFT, %g4
  378 + or %g5, %g4, %g5
  379 + mov PRIMARY_CONTEXT, %g4
369 380 stxa %g5, [%g4] ASI_DMMU
370 381 1: sub %g1, (1 << 3), %g1
371 382 ldx [%g7 + %g1], %g5
drivers/char/Kconfig
... ... @@ -175,7 +175,7 @@
175 175  
176 176 config MOXA_SMARTIO
177 177 tristate "Moxa SmartIO support"
178   - depends on SERIAL_NONSTANDARD
  178 + depends on SERIAL_NONSTANDARD && (BROKEN || !SPARC32)
179 179 help
180 180 Say Y here if you have a Moxa SmartIO multiport serial card.
181 181  
drivers/sbus/char/Kconfig
... ... @@ -69,11 +69,40 @@
69 69 If you say Y here, you will be able to boot from your JavaStation's
70 70 Flash memory.
71 71  
72   -# XXX Why don't we do "source drivers/char/Config.in" somewhere?
73   -# no shit
74   -config RTC
75   - tristate "PC-style Real Time Clock Support"
76   - depends on PCI && EXPERIMENTAL && SPARC32
  72 +config BBC_I2C
  73 + tristate "UltraSPARC-III bootbus i2c controller driver"
  74 + depends on PCI && SPARC64
  75 + help
  76 + The BBC devices on the UltraSPARC III have two I2C controllers. The
  77 + first I2C controller connects mainly to configuration PROMs (NVRAM,
  78 + CPU configuration, DIMM types, etc.). The second I2C controller
  79 + connects to environmental control devices such as fans and
  80 + temperature sensors. The second controller also connects to the
  81 + smartcard reader, if present. Say Y to enable support for these.
  82 +
  83 +config ENVCTRL
  84 + tristate "SUNW, envctrl support"
  85 + depends on PCI && SPARC64
  86 + help
  87 + Kernel support for temperature and fan monitoring on Sun SME
  88 + machines.
  89 +
  90 + To compile this driver as a module, choose M here: the
  91 + module will be called envctrl.
  92 +
  93 +config DISPLAY7SEG
  94 + tristate "7-Segment Display support"
  95 + depends on PCI && SPARC64
  96 + ---help---
  97 + This is the driver for the 7-segment display and LED present on
  98 + Sun Microsystems CompactPCI models CP1400 and CP1500.
  99 +
  100 + To compile this driver as a module, choose M here: the
  101 + module will be called display7seg.
  102 +
  103 + If you do not have a CompactPCI model CP1400 or CP1500, or
  104 + another UltraSPARC-IIi-cEngine boardset with a 7-segment display,
  105 + you should say N to this option.
77 106  
78 107 endmenu
include/asm-sparc/pgtable.h
... ... @@ -435,9 +435,6 @@
435 435 #define kern_addr_valid(addr) \
436 436 (test_bit(__pa((unsigned long)(addr))>>20, sparc_valid_addr_bitmap))
437 437  
438   -extern int io_remap_page_range(struct vm_area_struct *vma,
439   - unsigned long from, unsigned long to,
440   - unsigned long size, pgprot_t prot, int space);
441 438 extern int io_remap_pfn_range(struct vm_area_struct *vma,
442 439 unsigned long from, unsigned long pfn,
443 440 unsigned long size, pgprot_t prot);
include/asm-sparc64/cpudata.h
1 1 /* cpudata.h: Per-cpu parameters.
2 2 *
3   - * Copyright (C) 2003 David S. Miller (davem@redhat.com)
  3 + * Copyright (C) 2003, 2005 David S. Miller (davem@redhat.com)
4 4 */
5 5  
6 6 #ifndef _SPARC64_CPUDATA_H
... ... @@ -10,7 +10,7 @@
10 10  
11 11 typedef struct {
12 12 /* Dcache line 1 */
13   - unsigned int __pad0; /* bh_count moved to irq_stat for consistency. KAO */
  13 + unsigned int __softirq_pending; /* must be 1st, see rtrap.S */
14 14 unsigned int multiplier;
15 15 unsigned int counter;
16 16 unsigned int idle_volume;
include/asm-sparc64/hardirq.h
1 1 /* hardirq.h: 64-bit Sparc hard IRQ support.
2 2 *
3   - * Copyright (C) 1997, 1998 David S. Miller (davem@caip.rutgers.edu)
  3 + * Copyright (C) 1997, 1998, 2005 David S. Miller (davem@davemloft.net)
4 4 */
5 5  
6 6 #ifndef __SPARC64_HARDIRQ_H
7 7 #define __SPARC64_HARDIRQ_H
8 8  
9   -#include <linux/config.h>
10   -#include <linux/threads.h>
11   -#include <linux/spinlock.h>
12   -#include <linux/cache.h>
  9 +#include <asm/cpudata.h>
13 10  
14   -/* rtrap.S is sensitive to the offsets of these fields */
15   -typedef struct {
16   - unsigned int __softirq_pending;
17   -} ____cacheline_aligned irq_cpustat_t;
18   -
19   -#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
  11 +#define __ARCH_IRQ_STAT
  12 +#define local_softirq_pending() \
  13 + (local_cpu_data().__softirq_pending)
20 14  
21 15 #define HARDIRQ_BITS 8
22 16  
include/asm-sparc64/io.h
... ... @@ -100,18 +100,41 @@
100 100 #define inl_p(__addr) inl(__addr)
101 101 #define outl_p(__l, __addr) outl(__l, __addr)
102 102  
103   -extern void outsb(void __iomem *addr, const void *src, unsigned long count);
104   -extern void outsw(void __iomem *addr, const void *src, unsigned long count);
105   -extern void outsl(void __iomem *addr, const void *src, unsigned long count);
106   -extern void insb(void __iomem *addr, void *dst, unsigned long count);
107   -extern void insw(void __iomem *addr, void *dst, unsigned long count);
108   -extern void insl(void __iomem *addr, void *dst, unsigned long count);
109   -#define ioread8_rep(a,d,c) insb(a,d,c)
110   -#define ioread16_rep(a,d,c) insw(a,d,c)
111   -#define ioread32_rep(a,d,c) insl(a,d,c)
112   -#define iowrite8_rep(a,s,c) outsb(a,s,c)
113   -#define iowrite16_rep(a,s,c) outsw(a,s,c)
114   -#define iowrite32_rep(a,s,c) outsl(a,s,c)
  103 +extern void outsb(unsigned long, const void *, unsigned long);
  104 +extern void outsw(unsigned long, const void *, unsigned long);
  105 +extern void outsl(unsigned long, const void *, unsigned long);
  106 +extern void insb(unsigned long, void *, unsigned long);
  107 +extern void insw(unsigned long, void *, unsigned long);
  108 +extern void insl(unsigned long, void *, unsigned long);
  109 +
  110 +static inline void ioread8_rep(void __iomem *port, void *buf, unsigned long count)
  111 +{
  112 + insb((unsigned long __force)port, buf, count);
  113 +}
  114 +static inline void ioread16_rep(void __iomem *port, void *buf, unsigned long count)
  115 +{
  116 + insw((unsigned long __force)port, buf, count);
  117 +}
  118 +
  119 +static inline void ioread32_rep(void __iomem *port, void *buf, unsigned long count)
  120 +{
  121 + insl((unsigned long __force)port, buf, count);
  122 +}
  123 +
  124 +static inline void iowrite8_rep(void __iomem *port, const void *buf, unsigned long count)
  125 +{
  126 + outsb((unsigned long __force)port, buf, count);
  127 +}
  128 +
  129 +static inline void iowrite16_rep(void __iomem *port, const void *buf, unsigned long count)
  130 +{
  131 + outsw((unsigned long __force)port, buf, count);
  132 +}
  133 +
  134 +static inline void iowrite32_rep(void __iomem *port, const void *buf, unsigned long count)
  135 +{
  136 + outsl((unsigned long __force)port, buf, count);
  137 +}
115 138  
116 139 /* Memory functions, same as I/O accesses on Ultra. */
117 140 static inline u8 _readb(const volatile void __iomem *addr)
include/asm-sparc64/pgtable.h
... ... @@ -410,9 +410,6 @@
410 410 #define kern_addr_valid(addr) \
411 411 (test_bit(__pa((unsigned long)(addr))>>22, sparc64_valid_addr_bitmap))
412 412  
413   -extern int io_remap_page_range(struct vm_area_struct *vma, unsigned long from,
414   - unsigned long offset,
415   - unsigned long size, pgprot_t prot, int space);
416 413 extern int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
417 414 unsigned long pfn,
418 415 unsigned long size, pgprot_t prot);