freemyipod r87 - Code Review

Jump to: navigation, search
Repository:freemyipod
Revision:r86‎ | r87 | r88 >
Date:01:02, 11 August 2010
Author:theseven
Status:new
Tags:
Comment:
Fix Nano4G I2C (with polling for now) and do some cleanup
Modified paths:
  • /embios/trunk/SOURCES (modified) (history)
  • /embios/trunk/clockgates.h (added) (history)
  • /embios/trunk/init.c (modified) (history)
  • /embios/trunk/target/ipodnano2g/clockgates.c (added) (history)
  • /embios/trunk/target/ipodnano2g/s5l8701.h (modified) (history)
  • /embios/trunk/target/ipodnano4g/accel.c (modified) (history)
  • /embios/trunk/target/ipodnano4g/clockgates.c (added) (history)
  • /embios/trunk/target/ipodnano4g/i2c.c (modified) (history)
  • /embios/trunk/target/ipodnano4g/s5l8720.h (modified) (history)
  • /embios/trunk/usb/synopsysotg.c (modified) (history)

Diff [purge]

Index: embios/trunk/init.c
@@ -41,10 +41,12 @@
4242 #include "disk.h"
4343 #endif
4444
 45+
4546 static const char welcomestring[] INITCONST_ATTR = "emBIOS v" VERSION " r" VERSION_SVN "\n\n";
4647 static const char initthreadname[] INITCONST_ATTR = "Initialisation thread";
4748 static uint32_t initstack[0x400] INITBSS_ATTR;
4849
 50+
4951 void initthread() INITCODE_ATTR;
5052 void initthread()
5153 {
Index: embios/trunk/clockgates.h
@@ -0,0 +1,34 @@
 2+//
 3+//
 4+// Copyright 2010 TheSeven
 5+//
 6+//
 7+// This file is part of emBIOS.
 8+//
 9+// emBIOS is free software: you can redistribute it and/or
 10+// modify it under the terms of the GNU General Public License as
 11+// published by the Free Software Foundation, either version 2 of the
 12+// License, or (at your option) any later version.
 13+//
 14+// emBIOS is distributed in the hope that it will be useful,
 15+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 16+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 17+// See the GNU General Public License for more details.
 18+//
 19+// You should have received a copy of the GNU General Public License along
 20+// with emBIOS. If not, see <http://www.gnu.org/licenses/>.
 21+//
 22+//
 23+
 24+
 25+#ifndef __CLOCKGATES_H__
 26+#define __CLOCKGATES_H__
 27+
 28+
 29+#include "global.h"
 30+
 31+
 32+void clockgate_enable(int gate, bool enable);
 33+
 34+
 35+#endif
\ No newline at end of file
Index: embios/trunk/SOURCES
@@ -11,6 +11,7 @@
1212 target/ipodnano2g/nand.c
1313 target/ipodnano2g/ftl.c
1414 target/ipodnano2g/storage_nand.c
 15+target/ipodnano2g/clockgates.c
1516 usb/synopsysotg.c
1617 #endif
1718
@@ -23,6 +24,7 @@
2425 target/ipodnano4g/power.c
2526 target/ipodnano4g/accel.c
2627 target/ipodnano4g/backlight.c
 28+target/ipodnano4g/clockgates.c
2729 usb/synopsysotg.c
2830 #endif
2931
Index: embios/trunk/target/ipodnano2g/clockgates.c
@@ -0,0 +1,32 @@
 2+//
 3+//
 4+// Copyright 2010 TheSeven
 5+//
 6+//
 7+// This file is part of emBIOS.
 8+//
 9+// emBIOS is free software: you can redistribute it and/or
 10+// modify it under the terms of the GNU General Public License as
 11+// published by the Free Software Foundation, either version 2 of the
 12+// License, or (at your option) any later version.
 13+//
 14+// emBIOS is distributed in the hope that it will be useful,
 15+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 16+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 17+// See the GNU General Public License for more details.
 18+//
 19+// You should have received a copy of the GNU General Public License along
 20+// with emBIOS. If not, see <http://www.gnu.org/licenses/>.
 21+//
 22+//
 23+
 24+
 25+#include "global.h"
 26+#include "s5l8720.h"
 27+
 28+
 29+void clockgate_enable(int gate, bool enable)
 30+{
 31+ if (enable) PWRCON(gate >> 5) &= ~(1 << (gate & 0x1f));
 32+ else PWRCON(gate >> 5) |= 1 << (gate & 0x1f);
 33+}
Index: embios/trunk/target/ipodnano2g/s5l8701.h
@@ -37,13 +37,12 @@
3838 #define PLL2LCNT (*((volatile uint32_t*)(0x3C50001C)))
3939 #define PLLLOCK (*((volatile uint32_t*)(0x3C500020)))
4040 #define PLLCON (*((volatile uint32_t*)(0x3C500024)))
41 -#define PWRCON (*((volatile uint32_t*)(0x3C500028)))
4241 #define PWRMODE (*((volatile uint32_t*)(0x3C50002C)))
4342 #define SWRCON (*((volatile uint32_t*)(0x3C500030)))
4443 #define RSTSR (*((volatile uint32_t*)(0x3C500034)))
4544 #define DSPCLKMD (*((volatile uint32_t*)(0x3C500038)))
4645 #define CLKCON2 (*((volatile uint32_t*)(0x3C50003C)))
47 -#define PWRCONEXT (*((volatile uint32_t*)(0x3C500040)))
 46+#define PWRCON(i) (*((volatile uint32_t*)(0x3C500000 + ((i) == 1 ? 0x28 : 0x40))))
4847
4948
5049 /////ICU/////
@@ -285,6 +284,11 @@
286285 #define IICDS (*((volatile uint32_t*)(0x3C90000C)))
287286
288287
 288+/////CLOCK GATES/////
 289+#define CLOCKGATE_USB_1 14
 290+#define CLOCKGATE_USB_2 43
 291+
 292+
289293 /////INTERRUPTS/////
290294 #define IRQ_TIMER 5
291295 #define IRQ_DMA 10
Index: embios/trunk/target/ipodnano4g/accel.c
@@ -26,5 +26,5 @@
2727
2828 int8_t accel_get_axis(uint8_t axis)
2929 {
30 - return i2crecvbyte(0, 0x3a, 0x29 + 2 * axis);
 30+ return i2c_recvbyte(0, 0x3a, 0x29 + 2 * axis);
3131 }
Index: embios/trunk/target/ipodnano4g/i2c.c
@@ -28,21 +28,38 @@
2929
3030
3131 static struct mutex i2cmutex;
32 -static struct wakeup i2cwakeup;
3332
3433
3534 void i2c_init()
3635 {
3736 mutex_init(&i2cmutex);
38 - wakeup_init(&i2cwakeup);
39 -
40 - interrupt_enable(IRQ_IIC, true);
4137 }
4238
4339 void i2c_send(uint32_t bus, uint32_t device, uint32_t address, const uint8_t* data, uint32_t length)
4440 {
4541 mutex_lock(&i2cmutex, TIMEOUT_BLOCK);
46 -
 42+ IICDS(bus) = device & ~1;
 43+ IICSTAT(bus) = 0xF0;
 44+ IICCON(bus) = 0xB7;
 45+ while ((IICCON(bus) & 0x10) == 0) yield();
 46+ if (address >= 0)
 47+ {
 48+ /* write address */
 49+ IICDS(bus) = address;
 50+ IICCON(bus) = 0xB7;
 51+ while ((IICCON(bus) & 0x10) == 0) yield();
 52+ }
 53+ /* write data */
 54+ while (length--)
 55+ {
 56+ IICDS(bus) = *data++;
 57+ IICCON(bus) = 0xB7;
 58+ while ((IICCON(bus) & 0x10) == 0) yield();
 59+ }
 60+ /* STOP */
 61+ IICSTAT(bus) = 0xD0;
 62+ IICCON(bus) = 0xB7;
 63+ while ((IICSTAT(bus) & (1 << 5)) != 0) yield();
4764 mutex_unlock(&i2cmutex);
4865 }
4966
@@ -49,7 +66,33 @@
5067 void i2c_recv(uint32_t bus, uint32_t device, uint32_t address, uint8_t* data, uint32_t length)
5168 {
5269 mutex_lock(&i2cmutex, TIMEOUT_BLOCK);
53 -
 70+ if (address >= 0)
 71+ {
 72+ /* START */
 73+ IICDS(bus) = device & ~1;
 74+ IICSTAT(bus) = 0xF0;
 75+ IICCON(bus) = 0xB7;
 76+ while ((IICCON(bus) & 0x10) == 0) yield();
 77+ /* write address */
 78+ IICDS(bus) = address;
 79+ IICCON(bus) = 0xB7;
 80+ while ((IICCON(bus) & 0x10) == 0) yield();
 81+ }
 82+ /* (repeated) START */
 83+ IICDS(bus) = device | 1;
 84+ IICSTAT(bus) = 0xB0;
 85+ IICCON(bus) = 0xB7;
 86+ while ((IICCON(bus) & 0x10) == 0) yield();
 87+ while (length--)
 88+ {
 89+ IICCON(bus) = (length == 0) ? 0x37 : 0xB7; /* NACK or ACK */
 90+ while ((IICCON(bus) & 0x10) == 0) yield();
 91+ *data++ = IICDS(bus);
 92+ }
 93+ /* STOP */
 94+ IICSTAT(bus) = 0x90;
 95+ IICCON(bus) = 0xB7;
 96+ while ((IICSTAT(bus) & (1 << 5)) != 0) yield();
5497 mutex_unlock(&i2cmutex);
5598 }
5699
@@ -66,9 +109,3 @@
67110 i2c_recv(bus, device, address, buf, 1);
68111 return buf[0];
69112 }
70 -
71 -void INT_IIC()
72 -{
73 -
74 - wakeup_signal(&i2cwakeup);
75 -}
Index: embios/trunk/target/ipodnano4g/clockgates.c
@@ -0,0 +1,32 @@
 2+//
 3+//
 4+// Copyright 2010 TheSeven
 5+//
 6+//
 7+// This file is part of emBIOS.
 8+//
 9+// emBIOS is free software: you can redistribute it and/or
 10+// modify it under the terms of the GNU General Public License as
 11+// published by the Free Software Foundation, either version 2 of the
 12+// License, or (at your option) any later version.
 13+//
 14+// emBIOS is distributed in the hope that it will be useful,
 15+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 16+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 17+// See the GNU General Public License for more details.
 18+//
 19+// You should have received a copy of the GNU General Public License along
 20+// with emBIOS. If not, see <http://www.gnu.org/licenses/>.
 21+//
 22+//
 23+
 24+
 25+#include "global.h"
 26+#include "s5l8720.h"
 27+
 28+
 29+void clockgate_enable(int gate, bool enable)
 30+{
 31+ if (enable) PWRCON(gate >> 5) &= ~(1 << (gate & 0x1f));
 32+ else PWRCON(gate >> 5) |= 1 << (gate & 0x1f);
 33+}
Index: embios/trunk/target/ipodnano4g/s5l8720.h
@@ -27,211 +27,15 @@
2828 #include "global.h"
2929
3030
31 -/////CLKCON/////
32 -#define CLKCON (*((volatile uint32_t*)(0x3C500000)))
33 -#define PLL0PMS (*((volatile uint32_t*)(0x3C500004)))
34 -#define PLL1PMS (*((volatile uint32_t*)(0x3C500008)))
35 -#define PLL2PMS (*((volatile uint32_t*)(0x3C50000C)))
36 -#define PLL0LCNT (*((volatile uint32_t*)(0x3C500014)))
37 -#define PLL1LCNT (*((volatile uint32_t*)(0x3C500018)))
38 -#define PLL2LCNT (*((volatile uint32_t*)(0x3C50001C)))
39 -#define PLLLOCK (*((volatile uint32_t*)(0x3C500020)))
40 -#define PLLCON (*((volatile uint32_t*)(0x3C500024)))
41 -#define PWRCON (*((volatile uint32_t*)(0x3C500028)))
42 -#define PWRMODE (*((volatile uint32_t*)(0x3C50002C)))
43 -#define SWRCON (*((volatile uint32_t*)(0x3C500030)))
44 -#define RSTSR (*((volatile uint32_t*)(0x3C500034)))
45 -#define DSPCLKMD (*((volatile uint32_t*)(0x3C500038)))
46 -#define CLKCON2 (*((volatile uint32_t*)(0x3C50003C)))
47 -#define PWRCONEXT (*((volatile uint32_t*)(0x3C500040)))
 31+/////SYSCON/////
 32+#define PWRCON(i) (*((volatile uint32_t*)(0x3C500000 \
 33+ + ((i) == 4 ? 0x6C : \
 34+ ((i) == 3 ? 0x68 : \
 35+ ((i) == 2 ? 0x58 : \
 36+ ((i) == 1 ? 0x4C : \
 37+ 0x48)))))))
4838
4939
50 -/////GPIO/////
51 -#define PCON0 (*((volatile uint32_t*)(0x3CF00000)))
52 -#define PDAT0 (*((volatile uint32_t*)(0x3CF00004)))
53 -#define PCON1 (*((volatile uint32_t*)(0x3CF00010)))
54 -#define PDAT1 (*((volatile uint32_t*)(0x3CF00014)))
55 -#define PCON2 (*((volatile uint32_t*)(0x3CF00020)))
56 -#define PDAT2 (*((volatile uint32_t*)(0x3CF00024)))
57 -#define PCON3 (*((volatile uint32_t*)(0x3CF00030)))
58 -#define PDAT3 (*((volatile uint32_t*)(0x3CF00034)))
59 -#define PCON4 (*((volatile uint32_t*)(0x3CF00040)))
60 -#define PDAT4 (*((volatile uint32_t*)(0x3CF00044)))
61 -#define PCON5 (*((volatile uint32_t*)(0x3CF00050)))
62 -#define PDAT5 (*((volatile uint32_t*)(0x3CF00054)))
63 -#define PUNK5 (*((volatile uint32_t*)(0x3CF0005C)))
64 -#define PCON6 (*((volatile uint32_t*)(0x3CF00060)))
65 -#define PDAT6 (*((volatile uint32_t*)(0x3CF00064)))
66 -#define PCON7 (*((volatile uint32_t*)(0x3CF00070)))
67 -#define PDAT7 (*((volatile uint32_t*)(0x3CF00074)))
68 -#define PCON10 (*((volatile uint32_t*)(0x3CF000A0)))
69 -#define PDAT10 (*((volatile uint32_t*)(0x3CF000A4)))
70 -#define PCON11 (*((volatile uint32_t*)(0x3CF000B0)))
71 -#define PDAT11 (*((volatile uint32_t*)(0x3CF000B4)))
72 -#define PCON15 (*((volatile uint32_t*)(0x3CF000F0)))
73 -#define PUNK15 (*((volatile uint32_t*)(0x3CF000FC)))
74 -
75 -
76 -/////IODMA/////
77 -#define DMABASE0 (*((volatile uint32_t*)(0x38400000)))
78 -#define DMACON0 (*((volatile uint32_t*)(0x38400004)))
79 -#define DMATCNT0 (*((volatile uint32_t*)(0x38400008)))
80 -#define DMACADDR0 (*((volatile uint32_t*)(0x3840000C)))
81 -#define DMACTCNT0 (*((volatile uint32_t*)(0x38400010)))
82 -#define DMACOM0 (*((volatile uint32_t*)(0x38400014)))
83 -#define DMANOF0 (*((volatile uint32_t*)(0x38400018)))
84 -#define DMABASE1 (*((volatile uint32_t*)(0x38400020)))
85 -#define DMACON1 (*((volatile uint32_t*)(0x38400024)))
86 -#define DMATCNT1 (*((volatile uint32_t*)(0x38400028)))
87 -#define DMACADDR1 (*((volatile uint32_t*)(0x3840002C)))
88 -#define DMACTCNT1 (*((volatile uint32_t*)(0x38400030)))
89 -#define DMACOM1 (*((volatile uint32_t*)(0x38400034)))
90 -#define DMABASE2 (*((volatile uint32_t*)(0x38400040)))
91 -#define DMACON2 (*((volatile uint32_t*)(0x38400044)))
92 -#define DMATCNT2 (*((volatile uint32_t*)(0x38400048)))
93 -#define DMACADDR2 (*((volatile uint32_t*)(0x3840004C)))
94 -#define DMACTCNT2 (*((volatile uint32_t*)(0x38400050)))
95 -#define DMACOM2 (*((volatile uint32_t*)(0x38400054)))
96 -#define DMABASE3 (*((volatile uint32_t*)(0x38400060)))
97 -#define DMACON3 (*((volatile uint32_t*)(0x38400064)))
98 -#define DMATCNT3 (*((volatile uint32_t*)(0x38400068)))
99 -#define DMACADDR3 (*((volatile uint32_t*)(0x3840006C)))
100 -#define DMACTCNT3 (*((volatile uint32_t*)(0x38400070)))
101 -#define DMACOM3 (*((volatile uint32_t*)(0x38400074)))
102 -#define DMABASE4 (*((volatile uint32_t*)(0x38400080)))
103 -#define DMACON4 (*((volatile uint32_t*)(0x38400084)))
104 -#define DMATCNT4 (*((volatile uint32_t*)(0x38400088)))
105 -#define DMACADDR4 (*((volatile uint32_t*)(0x3840008C)))
106 -#define DMACTCNT4 (*((volatile uint32_t*)(0x38400090)))
107 -#define DMACOM4 (*((volatile uint32_t*)(0x38400094)))
108 -#define DMABASE5 (*((volatile uint32_t*)(0x384000A0)))
109 -#define DMACON5 (*((volatile uint32_t*)(0x384000A4)))
110 -#define DMATCNT5 (*((volatile uint32_t*)(0x384000A8)))
111 -#define DMACADDR5 (*((volatile uint32_t*)(0x384000AC)))
112 -#define DMACTCNT5 (*((volatile uint32_t*)(0x384000B0)))
113 -#define DMACOM5 (*((volatile uint32_t*)(0x384000B4)))
114 -#define DMABASE6 (*((volatile uint32_t*)(0x384000C0)))
115 -#define DMACON6 (*((volatile uint32_t*)(0x384000C4)))
116 -#define DMATCNT6 (*((volatile uint32_t*)(0x384000C8)))
117 -#define DMACADDR6 (*((volatile uint32_t*)(0x384000CC)))
118 -#define DMACTCNT6 (*((volatile uint32_t*)(0x384000D0)))
119 -#define DMACOM6 (*((volatile uint32_t*)(0x384000D4)))
120 -#define DMABASE7 (*((volatile uint32_t*)(0x384000E0)))
121 -#define DMACON7 (*((volatile uint32_t*)(0x384000E4)))
122 -#define DMATCNT7 (*((volatile uint32_t*)(0x384000E8)))
123 -#define DMACADDR7 (*((volatile uint32_t*)(0x384000EC)))
124 -#define DMACTCNT7 (*((volatile uint32_t*)(0x384000F0)))
125 -#define DMACOM7 (*((volatile uint32_t*)(0x384000F4)))
126 -#define DMABASE8 (*((volatile uint32_t*)(0x38400100)))
127 -#define DMACON8 (*((volatile uint32_t*)(0x38400104)))
128 -#define DMATCNT8 (*((volatile uint32_t*)(0x38400108)))
129 -#define DMACADDR8 (*((volatile uint32_t*)(0x3840010C)))
130 -#define DMACTCNT8 (*((volatile uint32_t*)(0x38400110)))
131 -#define DMACOM8 (*((volatile uint32_t*)(0x38400114)))
132 -#define DMAALLST (*((volatile uint32_t*)(0x38400180)))
133 -#define DMAALLST2 (*((volatile uint32_t*)(0x38400184)))
134 -#define DMACON_DEVICE_SHIFT 30
135 -#define DMACON_DIRECTION_SHIFT 29
136 -#define DMACON_DATA_SIZE_SHIFT 22
137 -#define DMACON_BURST_LEN_SHIFT 19
138 -#define DMACOM_START 4
139 -#define DMACOM_CLEARBOTHDONE 7
140 -#define DMAALLST_WCOM0 (1 << 0)
141 -#define DMAALLST_HCOM0 (1 << 1)
142 -#define DMAALLST_DMABUSY0 (1 << 2)
143 -#define DMAALLST_HOLD_SKIP (1 << 3)
144 -#define DMAALLST_WCOM1 (1 << 4)
145 -#define DMAALLST_HCOM1 (1 << 5)
146 -#define DMAALLST_DMABUSY1 (1 << 6)
147 -#define DMAALLST_WCOM2 (1 << 8)
148 -#define DMAALLST_HCOM2 (1 << 9)
149 -#define DMAALLST_DMABUSY2 (1 << 10)
150 -#define DMAALLST_WCOM3 (1 << 12)
151 -#define DMAALLST_HCOM3 (1 << 13)
152 -#define DMAALLST_DMABUSY3 (1 << 14)
153 -#define DMAALLST_CHAN0_MASK (0xF << 0)
154 -#define DMAALLST_CHAN1_MASK (0xF << 4)
155 -#define DMAALLST_CHAN2_MASK (0xF << 8)
156 -#define DMAALLST_CHAN3_MASK (0xF << 12)
157 -
158 -
159 -/////FMC/////
160 -#define FMCTRL0 (*((volatile uint32_t*)(0x39400000)))
161 -#define FMCTRL1 (*((volatile uint32_t*)(0x39400004)))
162 -#define FMCMD (*((volatile uint32_t*)(0x39400008)))
163 -#define FMADDR0 (*((volatile uint32_t*)(0x3940000C)))
164 -#define FMADDR1 (*((volatile uint32_t*)(0x39400010)))
165 -#define FMANUM (*((volatile uint32_t*)(0x3940002C)))
166 -#define FMDNUM (*((volatile uint32_t*)(0x39400030)))
167 -#define FMCSTAT (*((volatile uint32_t*)(0x39400048)))
168 -#define FMFIFO (*((volatile uint32_t*)(0x39400080)))
169 -#define RS_ECC_CTRL (*((volatile uint32_t*)(0x39400100)))
170 -#define FMCTRL0_ENABLEDMA (1 << 10)
171 -#define FMCTRL0_UNK1 (1 << 11)
172 -#define FMCTRL1_DOTRANSADDR (1 << 0)
173 -#define FMCTRL1_DOREADDATA (1 << 1)
174 -#define FMCTRL1_DOWRITEDATA (1 << 2)
175 -#define FMCTRL1_CLEARWFIFO (1 << 6)
176 -#define FMCTRL1_CLEARRFIFO (1 << 7)
177 -#define FMCSTAT_RBB (1 << 0)
178 -#define FMCSTAT_RBBDONE (1 << 1)
179 -#define FMCSTAT_CMDDONE (1 << 2)
180 -#define FMCSTAT_ADDRDONE (1 << 3)
181 -#define FMCSTAT_BANK0READY (1 << 4)
182 -#define FMCSTAT_BANK1READY (1 << 5)
183 -#define FMCSTAT_BANK2READY (1 << 6)
184 -#define FMCSTAT_BANK3READY (1 << 7)
185 -
186 -
187 -/////ECC/////
188 -#define ECC_DATA_PTR (*((volatile uint32_t*)(0x39E00004)))
189 -#define ECC_SPARE_PTR (*((volatile uint32_t*)(0x39E00008)))
190 -#define ECC_CTRL (*((volatile uint32_t*)(0x39E0000C)))
191 -#define ECC_RESULT (*((volatile uint32_t*)(0x39E00010)))
192 -#define ECC_UNK1 (*((volatile uint32_t*)(0x39E00014)))
193 -#define ECC_INT_CLR (*((volatile uint32_t*)(0x39E00040)))
194 -#define ECCCTRL_STARTDECODING (1 << 0)
195 -#define ECCCTRL_STARTENCODING (1 << 1)
196 -#define ECCCTRL_STARTDECNOSYND (1 << 2)
197 -
198 -
199 -/////CLICKWHEEL/////
200 -#define WHEEL00 (*((volatile uint32_t*)(0x3C200000)))
201 -#define WHEEL04 (*((volatile uint32_t*)(0x3C200004)))
202 -#define WHEEL08 (*((volatile uint32_t*)(0x3C200008)))
203 -#define WHEEL0C (*((volatile uint32_t*)(0x3C20000C)))
204 -#define WHEEL10 (*((volatile uint32_t*)(0x3C200010)))
205 -#define WHEELINT (*((volatile uint32_t*)(0x3C200014)))
206 -#define WHEELRX (*((volatile uint32_t*)(0x3C200018)))
207 -#define WHEELTX (*((volatile uint32_t*)(0x3C20001C)))
208 -
209 -
210 -/////AES/////
211 -#define AESCONTROL (*((volatile uint32_t*)(0x39800000)))
212 -#define AESGO (*((volatile uint32_t*)(0x39800004)))
213 -#define AESUNKREG0 (*((volatile uint32_t*)(0x39800008)))
214 -#define AESSTATUS (*((volatile uint32_t*)(0x3980000C)))
215 -#define AESUNKREG1 (*((volatile uint32_t*)(0x39800010)))
216 -#define AESKEYLEN (*((volatile uint32_t*)(0x39800014)))
217 -#define AESOUTSIZE (*((volatile uint32_t*)(0x39800018)))
218 -#define AESOUTADDR (*((volatile uint32_t*)(0x39800020)))
219 -#define AESINSIZE (*((volatile uint32_t*)(0x39800024)))
220 -#define AESINADDR (*((volatile uint32_t*)(0x39800028)))
221 -#define AESAUXSIZE (*((volatile uint32_t*)(0x3980002C)))
222 -#define AESAUXADDR (*((volatile uint32_t*)(0x39800030)))
223 -#define AESSIZE3 (*((volatile uint32_t*)(0x39800034)))
224 -#define AESKEY ((volatile uint32_t*)(0x3980004C))
225 -#define AESTYPE (*((volatile uint32_t*)(0x3980006C)))
226 -#define AESIV ((volatile uint32_t*)(0x39800074))
227 -#define AESTYPE2 (*((volatile uint32_t*)(0x39800088)))
228 -#define AESUNKREG2 (*((volatile uint32_t*)(0x3980008C)))
229 -
230 -/////HASH/////
231 -#define HASHCTRL (*((volatile uint32_t*)(0x3C600000)))
232 -#define HASHRESULT ((volatile uint32_t*)(0x3C600020))
233 -#define HASHDATAIN ((volatile uint32_t*)(0x3C600040))
234 -
235 -
23640 /////TIMER/////
23741 #define TACON (*((volatile uint32_t*)(0x3C700000)))
23842 #define TACMD (*((volatile uint32_t*)(0x3C700004)))
@@ -291,10 +95,10 @@
29296
29397
29498 /////I2C/////
295 -#define IICCON (*((volatile uint32_t*)(0x3C900000)))
296 -#define IICSTAT (*((volatile uint32_t*)(0x3C900004)))
297 -#define IICADD (*((volatile uint32_t*)(0x3C900008)))
298 -#define IICDS (*((volatile uint32_t*)(0x3C90000C)))
 99+#define IICCON(bus) (*((volatile uint32_t*)(0x3C600000 + 0x300000 * (bus))))
 100+#define IICSTAT(bus) (*((volatile uint32_t*)(0x3C600004 + 0x300000 * (bus))))
 101+#define IICADD(bus) (*((volatile uint32_t*)(0x3C600008 + 0x300000 * (bus))))
 102+#define IICDS(bus) (*((volatile uint32_t*)(0x3C60000C + 0x300000 * (bus))))
299103
300104
301105 /////INTERRUPTS/////
@@ -468,9 +272,16 @@
469273 #define VIC1VECTPRIORITY30 (*((volatile uint32_t*)(0x38E01278)))
470274 #define VIC1VECTPRIORITY31 (*((volatile uint32_t*)(0x38E0127C)))
471275 #define VIC1ADDRESS (*((volatile uint32_t*)(0x38E01F00)))
 276+
 277+
 278+/////CLOCK GATES/////
 279+#define CLOCKGATE_USB_1 2
 280+#define CLOCKGATE_USB_2 35
 281+
 282+
 283+/////INTERRUPTS/////
472284 #define IRQ_TIMER 8
473285 #define IRQ_USB_FUNC 19
474 -#define IRQ_IIC 0
475286
476287
477288 #endif
Index: embios/trunk/usb/synopsysotg.c
@@ -32,6 +32,7 @@
3333 #include "synopsysotg.h"
3434 #include "util.h"
3535 #include "interrupt.h"
 36+#include "clockgates.h"
3637
3738
3839 struct ep_type
@@ -357,8 +358,8 @@
358359 wakeup_init(&endpoints[i].complete);
359360
360361 /* Enable USB clock */
361 - PWRCON &= ~0x4000;
362 - PWRCONEXT &= ~0x800;
 362+ clockgate_enable(CLOCKGATE_USB_1, true);
 363+ clockgate_enable(CLOCKGATE_USB_2, true);
363364 PCGCCTL = 0;
364365
365366 /* unmask irq */