diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-10 11:38:52 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-10 11:38:52 -0400 |
commit | eb1b74e097db51a213600e8c776db754d7056e6a (patch) | |
tree | b16c3b9c42e01a3b5affb70621de6587f4dd4651 /arch | |
parent | 50f72b57946d565db74fae71bac23f3f319311c8 (diff) | |
parent | 7dead80cbee3259e3a9f25bfc65c8dc769a19e0e (diff) |
Merge master.kernel.org:/home/rmk/linux-2.6-arm
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/common/scoop.c | 20 | ||||
-rw-r--r-- | arch/arm/mach-pxa/corgi.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/collie.c | 6 | ||||
-rw-r--r-- | arch/arm/mm/alignment.c | 11 | ||||
-rw-r--r-- | arch/arm/tools/mach-types | 90 |
5 files changed, 118 insertions, 10 deletions
diff --git a/arch/arm/common/scoop.c b/arch/arm/common/scoop.c index d3a04c2a2c85..9e5245c702de 100644 --- a/arch/arm/common/scoop.c +++ b/arch/arm/common/scoop.c | |||
@@ -26,6 +26,8 @@ struct scoop_pcmcia_dev *scoop_devs; | |||
26 | struct scoop_dev { | 26 | struct scoop_dev { |
27 | void *base; | 27 | void *base; |
28 | spinlock_t scoop_lock; | 28 | spinlock_t scoop_lock; |
29 | unsigned short suspend_clr; | ||
30 | unsigned short suspend_set; | ||
29 | u32 scoop_gpwr; | 31 | u32 scoop_gpwr; |
30 | }; | 32 | }; |
31 | 33 | ||
@@ -90,14 +92,24 @@ EXPORT_SYMBOL(reset_scoop); | |||
90 | EXPORT_SYMBOL(read_scoop_reg); | 92 | EXPORT_SYMBOL(read_scoop_reg); |
91 | EXPORT_SYMBOL(write_scoop_reg); | 93 | EXPORT_SYMBOL(write_scoop_reg); |
92 | 94 | ||
95 | static void check_scoop_reg(struct scoop_dev *sdev) | ||
96 | { | ||
97 | unsigned short mcr; | ||
98 | |||
99 | mcr = SCOOP_REG(sdev->base, SCOOP_MCR); | ||
100 | if ((mcr & 0x100) == 0) | ||
101 | SCOOP_REG(sdev->base, SCOOP_MCR) = 0x0101; | ||
102 | } | ||
103 | |||
93 | #ifdef CONFIG_PM | 104 | #ifdef CONFIG_PM |
94 | static int scoop_suspend(struct device *dev, pm_message_t state, uint32_t level) | 105 | static int scoop_suspend(struct device *dev, pm_message_t state, uint32_t level) |
95 | { | 106 | { |
96 | if (level == SUSPEND_POWER_DOWN) { | 107 | if (level == SUSPEND_POWER_DOWN) { |
97 | struct scoop_dev *sdev = dev_get_drvdata(dev); | 108 | struct scoop_dev *sdev = dev_get_drvdata(dev); |
98 | 109 | ||
99 | sdev->scoop_gpwr = SCOOP_REG(sdev->base,SCOOP_GPWR); | 110 | check_scoop_reg(sdev); |
100 | SCOOP_REG(sdev->base,SCOOP_GPWR) = 0; | 111 | sdev->scoop_gpwr = SCOOP_REG(sdev->base, SCOOP_GPWR); |
112 | SCOOP_REG(sdev->base, SCOOP_GPWR) = (sdev->scoop_gpwr & ~sdev->suspend_clr) | sdev->suspend_set; | ||
101 | } | 113 | } |
102 | return 0; | 114 | return 0; |
103 | } | 115 | } |
@@ -107,6 +119,7 @@ static int scoop_resume(struct device *dev, uint32_t level) | |||
107 | if (level == RESUME_POWER_ON) { | 119 | if (level == RESUME_POWER_ON) { |
108 | struct scoop_dev *sdev = dev_get_drvdata(dev); | 120 | struct scoop_dev *sdev = dev_get_drvdata(dev); |
109 | 121 | ||
122 | check_scoop_reg(sdev); | ||
110 | SCOOP_REG(sdev->base,SCOOP_GPWR) = sdev->scoop_gpwr; | 123 | SCOOP_REG(sdev->base,SCOOP_GPWR) = sdev->scoop_gpwr; |
111 | } | 124 | } |
112 | return 0; | 125 | return 0; |
@@ -151,6 +164,9 @@ int __init scoop_probe(struct device *dev) | |||
151 | SCOOP_REG(devptr->base, SCOOP_GPCR) = inf->io_dir & 0xffff; | 164 | SCOOP_REG(devptr->base, SCOOP_GPCR) = inf->io_dir & 0xffff; |
152 | SCOOP_REG(devptr->base, SCOOP_GPWR) = inf->io_out & 0xffff; | 165 | SCOOP_REG(devptr->base, SCOOP_GPWR) = inf->io_out & 0xffff; |
153 | 166 | ||
167 | devptr->suspend_clr = inf->suspend_clr; | ||
168 | devptr->suspend_set = inf->suspend_set; | ||
169 | |||
154 | return 0; | 170 | return 0; |
155 | } | 171 | } |
156 | 172 | ||
diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c index be37586cb1b0..60c8b9d8bb9c 100644 --- a/arch/arm/mach-pxa/corgi.c +++ b/arch/arm/mach-pxa/corgi.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <asm/arch/mmc.h> | 36 | #include <asm/arch/mmc.h> |
37 | #include <asm/arch/udc.h> | 37 | #include <asm/arch/udc.h> |
38 | #include <asm/arch/corgi.h> | 38 | #include <asm/arch/corgi.h> |
39 | #include <asm/arch/sharpsl.h> | ||
39 | 40 | ||
40 | #include <asm/mach/sharpsl_param.h> | 41 | #include <asm/mach/sharpsl_param.h> |
41 | #include <asm/hardware/scoop.h> | 42 | #include <asm/hardware/scoop.h> |
diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c index 25d6a4e27533..6ecab7e2c238 100644 --- a/arch/arm/mach-sa1100/collie.c +++ b/arch/arm/mach-sa1100/collie.c | |||
@@ -111,11 +111,11 @@ static struct mtd_partition collie_partitions[] = { | |||
111 | 111 | ||
112 | static void collie_set_vpp(int vpp) | 112 | static void collie_set_vpp(int vpp) |
113 | { | 113 | { |
114 | write_scoop_reg(&colliescoop_device.dev, SCOOP_GPCR, read_scoop_reg(SCOOP_GPCR) | COLLIE_SCP_VPEN); | 114 | write_scoop_reg(&colliescoop_device.dev, SCOOP_GPCR, read_scoop_reg(&colliescoop_device.dev, SCOOP_GPCR) | COLLIE_SCP_VPEN); |
115 | if (vpp) | 115 | if (vpp) |
116 | write_scoop_reg(&colliescoop_device.dev, SCOOP_GPWR, read_scoop_reg(SCOOP_GPWR) | COLLIE_SCP_VPEN); | 116 | write_scoop_reg(&colliescoop_device.dev, SCOOP_GPWR, read_scoop_reg(&colliescoop_device.dev, SCOOP_GPWR) | COLLIE_SCP_VPEN); |
117 | else | 117 | else |
118 | write_scoop_reg(&colliescoop_device.dev, SCOOP_GPWR, read_scoop_reg(SCOOP_GPWR) & ~COLLIE_SCP_VPEN); | 118 | write_scoop_reg(&colliescoop_device.dev, SCOOP_GPWR, read_scoop_reg(&colliescoop_device.dev, SCOOP_GPWR) & ~COLLIE_SCP_VPEN); |
119 | } | 119 | } |
120 | 120 | ||
121 | static struct flash_platform_data collie_flash_data = { | 121 | static struct flash_platform_data collie_flash_data = { |
diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c index 4b39d867ac14..f35e69e9c65c 100644 --- a/arch/arm/mm/alignment.c +++ b/arch/arm/mm/alignment.c | |||
@@ -330,6 +330,9 @@ do_alignment_ldrdstrd(unsigned long addr, unsigned long instr, | |||
330 | { | 330 | { |
331 | unsigned int rd = RD_BITS(instr); | 331 | unsigned int rd = RD_BITS(instr); |
332 | 332 | ||
333 | if (((rd & 1) == 1) || (rd == 14)) | ||
334 | goto bad; | ||
335 | |||
333 | ai_dword += 1; | 336 | ai_dword += 1; |
334 | 337 | ||
335 | if (user_mode(regs)) | 338 | if (user_mode(regs)) |
@@ -361,7 +364,8 @@ do_alignment_ldrdstrd(unsigned long addr, unsigned long instr, | |||
361 | } | 364 | } |
362 | 365 | ||
363 | return TYPE_LDST; | 366 | return TYPE_LDST; |
364 | 367 | bad: | |
368 | return TYPE_ERROR; | ||
365 | fault: | 369 | fault: |
366 | return TYPE_FAULT; | 370 | return TYPE_FAULT; |
367 | } | 371 | } |
@@ -663,6 +667,8 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | |||
663 | else if ((instr & 0x001000f0) == 0x000000d0 || /* LDRD */ | 667 | else if ((instr & 0x001000f0) == 0x000000d0 || /* LDRD */ |
664 | (instr & 0x001000f0) == 0x000000f0) /* STRD */ | 668 | (instr & 0x001000f0) == 0x000000f0) /* STRD */ |
665 | handler = do_alignment_ldrdstrd; | 669 | handler = do_alignment_ldrdstrd; |
670 | else if ((instr & 0x01f00ff0) == 0x01000090) /* SWP */ | ||
671 | goto swp; | ||
666 | else | 672 | else |
667 | goto bad; | 673 | goto bad; |
668 | break; | 674 | break; |
@@ -733,6 +739,9 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | |||
733 | do_bad_area(current, current->mm, addr, fsr, regs); | 739 | do_bad_area(current, current->mm, addr, fsr, regs); |
734 | return 0; | 740 | return 0; |
735 | 741 | ||
742 | swp: | ||
743 | printk(KERN_ERR "Alignment trap: not handling swp instruction\n"); | ||
744 | |||
736 | bad: | 745 | bad: |
737 | /* | 746 | /* |
738 | * Oops, we didn't handle the instruction. | 747 | * Oops, we didn't handle the instruction. |
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types index 6d3a79e5fef8..ae7c64b8cec3 100644 --- a/arch/arm/tools/mach-types +++ b/arch/arm/tools/mach-types | |||
@@ -2,11 +2,17 @@ | |||
2 | # | 2 | # |
3 | # This file is linux/arch/arm/tools/mach-types | 3 | # This file is linux/arch/arm/tools/mach-types |
4 | # | 4 | # |
5 | # Up to date versions of this file can be obtained from: | ||
6 | # | ||
7 | # http://www.arm.linux.org.uk/developer/machines/?action=download | ||
8 | # | ||
5 | # Please do not send patches to this file; it is automatically generated! | 9 | # Please do not send patches to this file; it is automatically generated! |
6 | # To add an entry into this database, please see Documentation/arm/README, | 10 | # To add an entry into this database, please see Documentation/arm/README, |
7 | # or contact rmk@arm.linux.org.uk | 11 | # or visit: |
12 | # | ||
13 | # http://www.arm.linux.org.uk/developer/machines/?action=new | ||
8 | # | 14 | # |
9 | # Last update: Thu Jun 23 20:19:33 2005 | 15 | # Last update: Mon Oct 10 09:46:25 2005 |
10 | # | 16 | # |
11 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number | 17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number |
12 | # | 18 | # |
@@ -421,7 +427,7 @@ mt02 MACH_MT02 MT02 410 | |||
421 | mport3s MACH_MPORT3S MPORT3S 411 | 427 | mport3s MACH_MPORT3S MPORT3S 411 |
422 | ra_alpha MACH_RA_ALPHA RA_ALPHA 412 | 428 | ra_alpha MACH_RA_ALPHA RA_ALPHA 412 |
423 | xcep MACH_XCEP XCEP 413 | 429 | xcep MACH_XCEP XCEP 413 |
424 | arcom_mercury MACH_ARCOM_MERCURY ARCOM_MERCURY 414 | 430 | arcom_vulcan MACH_ARCOM_VULCAN ARCOM_VULCAN 414 |
425 | stargate MACH_STARGATE STARGATE 415 | 431 | stargate MACH_STARGATE STARGATE 415 |
426 | armadilloj MACH_ARMADILLOJ ARMADILLOJ 416 | 432 | armadilloj MACH_ARMADILLOJ ARMADILLOJ 416 |
427 | elroy_jack MACH_ELROY_JACK ELROY_JACK 417 | 433 | elroy_jack MACH_ELROY_JACK ELROY_JACK 417 |
@@ -454,7 +460,7 @@ esl_sarva MACH_ESL_SARVA ESL_SARVA 443 | |||
454 | xm250 MACH_XM250 XM250 444 | 460 | xm250 MACH_XM250 XM250 444 |
455 | t6tc1xb MACH_T6TC1XB T6TC1XB 445 | 461 | t6tc1xb MACH_T6TC1XB T6TC1XB 445 |
456 | ess710 MACH_ESS710 ESS710 446 | 462 | ess710 MACH_ESS710 ESS710 446 |
457 | mx3ads MACH_MX3ADS MX3ADS 447 | 463 | mx31ads MACH_MX3ADS MX3ADS 447 |
458 | himalaya MACH_HIMALAYA HIMALAYA 448 | 464 | himalaya MACH_HIMALAYA HIMALAYA 448 |
459 | bolfenk MACH_BOLFENK BOLFENK 449 | 465 | bolfenk MACH_BOLFENK BOLFENK 449 |
460 | at91rm9200kr MACH_AT91RM9200KR AT91RM9200KR 450 | 466 | at91rm9200kr MACH_AT91RM9200KR AT91RM9200KR 450 |
@@ -787,3 +793,79 @@ ez_ixp42x MACH_EZ_IXP42X EZ_IXP42X 778 | |||
787 | tapwave_zodiac MACH_TAPWAVE_ZODIAC TAPWAVE_ZODIAC 779 | 793 | tapwave_zodiac MACH_TAPWAVE_ZODIAC TAPWAVE_ZODIAC 779 |
788 | universalmeter MACH_UNIVERSALMETER UNIVERSALMETER 780 | 794 | universalmeter MACH_UNIVERSALMETER UNIVERSALMETER 780 |
789 | hicoarm9 MACH_HICOARM9 HICOARM9 781 | 795 | hicoarm9 MACH_HICOARM9 HICOARM9 781 |
796 | pnx4008 MACH_PNX4008 PNX4008 782 | ||
797 | kws6000 MACH_KWS6000 KWS6000 783 | ||
798 | portux920t MACH_PORTUX920T PORTUX920T 784 | ||
799 | ez_x5 MACH_EZ_X5 EZ_X5 785 | ||
800 | omap_rudolph MACH_OMAP_RUDOLPH OMAP_RUDOLPH 786 | ||
801 | cpuat91 MACH_CPUAT91 CPUAT91 787 | ||
802 | rea9200 MACH_REA9200 REA9200 788 | ||
803 | acts_pune_sa1110 MACH_ACTS_PUNE_SA1110 ACTS_PUNE_SA1110 789 | ||
804 | ixp425 MACH_IXP425 IXP425 790 | ||
805 | argonplusodyssey MACH_ODYSSEY ODYSSEY 791 | ||
806 | perch MACH_PERCH PERCH 792 | ||
807 | eis05r1 MACH_EIS05R1 EIS05R1 793 | ||
808 | pepperpad MACH_PEPPERPAD PEPPERPAD 794 | ||
809 | sb3010 MACH_SB3010 SB3010 795 | ||
810 | rm9200 MACH_RM9200 RM9200 796 | ||
811 | dma03 MACH_DMA03 DMA03 797 | ||
812 | road_s101 MACH_ROAD_S101 ROAD_S101 798 | ||
813 | iq_nextgen_a MACH_IQ_NEXTGEN_A IQ_NEXTGEN_A 799 | ||
814 | iq_nextgen_b MACH_IQ_NEXTGEN_B IQ_NEXTGEN_B 800 | ||
815 | iq_nextgen_c MACH_IQ_NEXTGEN_C IQ_NEXTGEN_C 801 | ||
816 | iq_nextgen_d MACH_IQ_NEXTGEN_D IQ_NEXTGEN_D 802 | ||
817 | iq_nextgen_e MACH_IQ_NEXTGEN_E IQ_NEXTGEN_E 803 | ||
818 | mallow_at91 MACH_MALLOW_AT91 MALLOW_AT91 804 | ||
819 | cybertracker MACH_CYBERTRACKER CYBERTRACKER 805 | ||
820 | gesbc931x MACH_GESBC931X GESBC931X 806 | ||
821 | centipad MACH_CENTIPAD CENTIPAD 807 | ||
822 | armsoc MACH_ARMSOC ARMSOC 808 | ||
823 | se4200 MACH_SE4200 SE4200 809 | ||
824 | ems197a MACH_EMS197A EMS197A 810 | ||
825 | micro9 MACH_MICRO9 MICRO9 811 | ||
826 | micro9l MACH_MICRO9L MICRO9L 812 | ||
827 | uc5471dsp MACH_UC5471DSP UC5471DSP 813 | ||
828 | sj5471eng MACH_SJ5471ENG SJ5471ENG 814 | ||
829 | none MACH_CMPXA26X CMPXA26X 815 | ||
830 | nc MACH_NC NC 816 | ||
831 | omap_palmte MACH_OMAP_PALMTE OMAP_PALMTE 817 | ||
832 | ajax52x MACH_AJAX52X AJAX52X 818 | ||
833 | siriustar MACH_SIRIUSTAR SIRIUSTAR 819 | ||
834 | iodata_hdlg MACH_IODATA_HDLG IODATA_HDLG 820 | ||
835 | at91rm9200utl MACH_AT91RM9200UTL AT91RM9200UTL 821 | ||
836 | biosafe MACH_BIOSAFE BIOSAFE 822 | ||
837 | mp1000 MACH_MP1000 MP1000 823 | ||
838 | parsy MACH_PARSY PARSY 824 | ||
839 | ccxp270 MACH_CCXP CCXP 825 | ||
840 | omap_gsample MACH_OMAP_GSAMPLE OMAP_GSAMPLE 826 | ||
841 | realview_eb MACH_REALVIEW_EB REALVIEW_EB 827 | ||
842 | samoa MACH_SAMOA SAMOA 828 | ||
843 | t3xscale MACH_T3XSCALE T3XSCALE 829 | ||
844 | i878 MACH_I878 I878 830 | ||
845 | borzoi MACH_BORZOI BORZOI 831 | ||
846 | gecko MACH_GECKO GECKO 832 | ||
847 | ds101 MACH_DS101 DS101 833 | ||
848 | omap_palmtt2 MACH_OMAP_PALMTT2 OMAP_PALMTT2 834 | ||
849 | xscale_palmld MACH_XSCALE_PALMLD XSCALE_PALMLD 835 | ||
850 | cc9c MACH_CC9C CC9C 836 | ||
851 | sbc1670 MACH_SBC1670 SBC1670 837 | ||
852 | ixdp28x5 MACH_IXDP28X5 IXDP28X5 838 | ||
853 | omap_palmtt MACH_OMAP_PALMTT OMAP_PALMTT 839 | ||
854 | ml696k MACH_ML696K ML696K 840 | ||
855 | arcom_zeus MACH_ARCOM_ZEUS ARCOM_ZEUS 841 | ||
856 | osiris MACH_OSIRIS OSIRIS 842 | ||
857 | maestro MACH_MAESTRO MAESTRO 843 | ||
858 | tunge2 MACH_TUNGE2 TUNGE2 844 | ||
859 | ixbbm MACH_IXBBM IXBBM 845 | ||
860 | mx27 MACH_MX27 MX27 846 | ||
861 | ax8004 MACH_AX8004 AX8004 847 | ||
862 | at91sam9261ek MACH_AT91SAM9261EK AT91SAM9261EK 848 | ||
863 | loft MACH_LOFT LOFT 849 | ||
864 | magpie MACH_MAGPIE MAGPIE 850 | ||
865 | mx21 MACH_MX21 MX21 851 | ||
866 | mb87m3400 MACH_MB87M3400 MB87M3400 852 | ||
867 | mguard_delta MACH_MGUARD_DELTA MGUARD_DELTA 853 | ||
868 | davinci_dvdp MACH_DAVINCI_DVDP DAVINCI_DVDP 854 | ||
869 | htcuniversal MACH_HTCUNIVERSAL HTCUNIVERSAL 855 | ||
870 | tpad MACH_TPAD TPAD 856 | ||
871 | roverp3 MACH_ROVERP3 ROVERP3 857 | ||