aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeiko Schocher2017-06-07 10:33:10 -0500
committerTom Rini2017-06-12 07:38:02 -0500
commit2eb48ff7a210ddd2a39bac23b3b9b39c60c32aef (patch)
treed948cc6059525960b72e912f533df2cb140cf5f0 /examples
parent5b8e76c35ec312a3f73126bd1a2d2c0965b98a9f (diff)
downloadu-boot-2eb48ff7a210ddd2a39bac23b3b9b39c60c32aef.tar.gz
u-boot-2eb48ff7a210ddd2a39bac23b3b9b39c60c32aef.tar.xz
u-boot-2eb48ff7a210ddd2a39bac23b3b9b39c60c32aef.zip
powerpc, 8260: remove support for mpc8260
There was for long time no activity in the 8260 area. We need to go further and convert to Kconfig, but it turned out, nobody is interested anymore in 8260, so remove it. Signed-off-by: Heiko Schocher <hs@denx.de>
Diffstat (limited to 'examples')
-rw-r--r--examples/standalone/Makefile1
-rw-r--r--examples/standalone/mem_to_mem_idma2intr.c379
2 files changed, 0 insertions, 380 deletions
diff --git a/examples/standalone/Makefile b/examples/standalone/Makefile
index 4c25f6f48f..810d285d4e 100644
--- a/examples/standalone/Makefile
+++ b/examples/standalone/Makefile
@@ -10,7 +10,6 @@ extra-$(CONFIG_SMC91111) += smc91111_eeprom
10extra-$(CONFIG_SMC911X) += smc911x_eeprom 10extra-$(CONFIG_SMC911X) += smc911x_eeprom
11extra-$(CONFIG_SPI_FLASH_ATMEL) += atmel_df_pow2 11extra-$(CONFIG_SPI_FLASH_ATMEL) += atmel_df_pow2
12extra-$(CONFIG_MPC5xxx) += interrupt 12extra-$(CONFIG_MPC5xxx) += interrupt
13extra-$(CONFIG_MPC8260) += mem_to_mem_idma2intr
14extra-$(CONFIG_PPC) += sched 13extra-$(CONFIG_PPC) += sched
15 14
16# 15#
diff --git a/examples/standalone/mem_to_mem_idma2intr.c b/examples/standalone/mem_to_mem_idma2intr.c
deleted file mode 100644
index ce6e6c4a10..0000000000
--- a/examples/standalone/mem_to_mem_idma2intr.c
+++ /dev/null
@@ -1,379 +0,0 @@
1/* The dpalloc function used and implemented in this file was derieved
2 * from PPCBoot/U-Boot file "arch/powerpc/cpu/mpc8260/commproc.c".
3 */
4
5/* Author: Arun Dharankar <ADharankar@ATTBI.Com>
6 * This example is meant to only demonstrate how the IDMA could be used.
7 */
8
9/*
10 * This file is based on "arch/powerpc/8260_io/commproc.c" - here is it's
11 * copyright notice:
12 *
13 * General Purpose functions for the global management of the
14 * 8260 Communication Processor Module.
15 * Copyright (c) 1999 Dan Malek (dmalek@jlc.net)
16 * Copyright (c) 2000 MontaVista Software, Inc (source@mvista.com)
17 * 2.3.99 Updates
18 *
19 * In addition to the individual control of the communication
20 * channels, there are a few functions that globally affect the
21 * communication processor.
22 *
23 * Buffer descriptors must be allocated from the dual ported memory
24 * space. The allocator for that is here. When the communication
25 * process is reset, we reclaim the memory available. There is
26 * currently no deallocator for this memory.
27 */
28
29
30#include <common.h>
31#include <console.h>
32#include <exports.h>
33
34DECLARE_GLOBAL_DATA_PTR;
35
36#define STANDALONE
37
38#ifndef STANDALONE /* Linked into/Part of PPCBoot */
39#include <command.h>
40#include <watchdog.h>
41#else /* Standalone app of PPCBoot */
42#define WATCHDOG_RESET() { \
43 *(ushort *)(CONFIG_SYS_IMMR + 0x1000E) = 0x556c; \
44 *(ushort *)(CONFIG_SYS_IMMR + 0x1000E) = 0xaa39; \
45 }
46#endif /* STANDALONE */
47
48static int debug = 1;
49
50#define DEBUG(fmt, args...) { \
51 if(debug != 0) { \
52 printf("[%s %d %s]: ",__FILE__,__LINE__,__FUNCTION__); \
53 printf(fmt, ##args); \
54 } \
55}
56
57#define CPM_CR_IDMA1_SBLOCK (0x14)
58#define CPM_CR_IDMA2_SBLOCK (0x15)
59#define CPM_CR_IDMA3_SBLOCK (0x16)
60#define CPM_CR_IDMA4_SBLOCK (0x17)
61#define CPM_CR_IDMA1_PAGE (0x07)
62#define CPM_CR_IDMA2_PAGE (0x08)
63#define CPM_CR_IDMA3_PAGE (0x09)
64#define CPM_CR_IDMA4_PAGE (0x0a)
65#define PROFF_IDMA1_BASE ((uint)0x87fe)
66#define PROFF_IDMA2_BASE ((uint)0x88fe)
67#define PROFF_IDMA3_BASE ((uint)0x89fe)
68#define PROFF_IDMA4_BASE ((uint)0x8afe)
69
70#define CPM_CR_INIT_TRX ((ushort)0x0000)
71#define CPM_CR_FLG ((ushort)0x0001)
72
73#define mk_cr_cmd(PG, SBC, MCN, OP) \
74 ((PG << 26) | (SBC << 21) | (MCN << 6) | OP)
75
76
77#pragma pack(1)
78typedef struct ibdbits {
79 unsigned b_valid:1;
80 unsigned b_resv1:1;
81 unsigned b_wrap:1;
82 unsigned b_interrupt:1;
83 unsigned b_last:1;
84 unsigned b_resv2:1;
85 unsigned b_cm:1;
86 unsigned b_resv3:2;
87 unsigned b_sdn:1;
88 unsigned b_ddn:1;
89 unsigned b_dgbl:1;
90 unsigned b_dbo:2;
91 unsigned b_resv4:1;
92 unsigned b_ddtb:1;
93 unsigned b_resv5:2;
94 unsigned b_sgbl:1;
95 unsigned b_sbo:2;
96 unsigned b_resv6:1;
97 unsigned b_sdtb:1;
98 unsigned b_resv7:9;
99} ibdbits_t;
100
101#pragma pack(1)
102typedef union ibdbitsu {
103 ibdbits_t b;
104 uint i;
105} ibdbitsu_t;
106
107#pragma pack(1)
108typedef struct idma_buf_desc {
109 ibdbitsu_t ibd_bits; /* Status and Control */
110 uint ibd_datlen; /* Data length in buffer */
111 uint ibd_sbuf; /* Source buffer addr in host mem */
112 uint ibd_dbuf; /* Destination buffer addr in host mem */
113} ibd_t;
114
115
116#pragma pack(1)
117typedef struct dcmbits {
118 unsigned b_fb:1;
119 unsigned b_lp:1;
120 unsigned b_resv1:3;
121 unsigned b_tc2:1;
122 unsigned b_resv2:1;
123 unsigned b_wrap:3;
124 unsigned b_sinc:1;
125 unsigned b_dinc:1;
126 unsigned b_erm:1;
127 unsigned b_dt:1;
128 unsigned b_sd:2;
129} dcmbits_t;
130
131#pragma pack(1)
132typedef union dcmbitsu {
133 dcmbits_t b;
134 ushort i;
135} dcmbitsu_t;
136
137#pragma pack(1)
138typedef struct pram_idma {
139 ushort pi_ibase;
140 dcmbitsu_t pi_dcmbits;
141 ushort pi_ibdptr;
142 ushort pi_dprbuf;
143 ushort pi_bufinv; /* internal to CPM */
144 ushort pi_ssmax;
145 ushort pi_dprinptr; /* internal to CPM */
146 ushort pi_sts;
147 ushort pi_dproutptr; /* internal to CPM */
148 ushort pi_seob;
149 ushort pi_deob;
150 ushort pi_dts;
151 ushort pi_retadd;
152 ushort pi_resv1; /* internal to CPM */
153 uint pi_bdcnt;
154 uint pi_sptr;
155 uint pi_dptr;
156 uint pi_istate;
157} pram_idma_t;
158
159
160volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
161volatile ibd_t *bdf;
162volatile pram_idma_t *piptr;
163
164volatile int dmadone;
165volatile int *dmadonep = &dmadone;
166void dmadone_handler (void *);
167
168int idma_init (void);
169void idma_start (int, int, int, uint, uint, int);
170uint dpalloc (uint, uint);
171
172
173uint dpinit_done = 0;
174
175
176#ifdef STANDALONE
177int ctrlc (void)
178{
179 if (tstc()) {
180 switch (getc ()) {
181 case 0x03: /* ^C - Control C */
182 return 1;
183 default:
184 break;
185 }
186 }
187 return 0;
188}
189int memcmp(const void * cs,const void * ct,size_t count)
190{
191 const unsigned char *su1, *su2;
192 int res = 0;
193 for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
194 if ((res = *su1 - *su2) != 0)
195 break;
196 return res;
197}
198#endif /* STANDALONE */
199
200#ifdef STANDALONE
201int mem_to_mem_idma2intr (int argc, char * const argv[])
202#else
203int do_idma (bd_t * bd, int argc, char * const argv[])
204#endif /* STANDALONE */
205{
206 int i;
207
208 app_startup(argv);
209 dpinit_done = 0;
210
211 idma_init ();
212
213 DEBUG ("Installing dma handler\n");
214 install_hdlr (7, dmadone_handler, (void *) bdf);
215
216 memset ((void *) 0x100000, 'a', 512);
217 memset ((void *) 0x200000, 'b', 512);
218
219 for (i = 0; i < 32; i++) {
220 printf ("Startin IDMA, iteration=%d\n", i);
221 idma_start (1, 1, 512, 0x100000, 0x200000, 3);
222 }
223
224 DEBUG ("Uninstalling dma handler\n");
225 free_hdlr (7);
226
227 return 0;
228}
229
230void
231idma_start (int sinc, int dinc, int sz, uint sbuf, uint dbuf, int ttype)
232{
233 /* ttype is for M-M, M-P, P-M or P-P: not used for now */
234
235 piptr->pi_istate = 0; /* manual says: clear it before every START_IDMA */
236 piptr->pi_dcmbits.b.b_resv1 = 0;
237
238 if (sinc == 1)
239 piptr->pi_dcmbits.b.b_sinc = 1;
240 else
241 piptr->pi_dcmbits.b.b_sinc = 0;
242
243 if (dinc == 1)
244 piptr->pi_dcmbits.b.b_dinc = 1;
245 else
246 piptr->pi_dcmbits.b.b_dinc = 0;
247
248 piptr->pi_dcmbits.b.b_erm = 0;
249 piptr->pi_dcmbits.b.b_sd = 0x00; /* M-M */
250
251 bdf->ibd_sbuf = sbuf;
252 bdf->ibd_dbuf = dbuf;
253 bdf->ibd_bits.b.b_cm = 0;
254 bdf->ibd_bits.b.b_interrupt = 1;
255 bdf->ibd_bits.b.b_wrap = 1;
256 bdf->ibd_bits.b.b_last = 1;
257 bdf->ibd_bits.b.b_sdn = 0;
258 bdf->ibd_bits.b.b_ddn = 0;
259 bdf->ibd_bits.b.b_dgbl = 0;
260 bdf->ibd_bits.b.b_ddtb = 0;
261 bdf->ibd_bits.b.b_sgbl = 0;
262 bdf->ibd_bits.b.b_sdtb = 0;
263 bdf->ibd_bits.b.b_dbo = 1;
264 bdf->ibd_bits.b.b_sbo = 1;
265 bdf->ibd_bits.b.b_valid = 1;
266 bdf->ibd_datlen = 512;
267
268 *dmadonep = 0;
269
270 immap->im_sdma.sdma_idmr2 = (uchar) 0xf;
271
272 immap->im_cpm.cp_cpcr = mk_cr_cmd (CPM_CR_IDMA2_PAGE,
273 CPM_CR_IDMA2_SBLOCK, 0x0,
274 0x9) | 0x00010000;
275
276 while (*dmadonep != 1) {
277 if (ctrlc ()) {
278 DEBUG ("\nInterrupted waiting for DMA interrupt.\n");
279 goto done;
280 }
281 printf ("Waiting for DMA interrupt (dmadone=%d b_valid = %d)...\n",
282 dmadone, bdf->ibd_bits.b.b_valid);
283 udelay (1000000);
284 }
285 printf ("DMA complete notification received!\n");
286
287 done:
288 DEBUG ("memcmp(0x%08x, 0x%08x, 512) = %d\n",
289 sbuf, dbuf, memcmp ((void *) sbuf, (void *) dbuf, 512));
290
291 return;
292}
293
294#define MAX_INT_BUFSZ 64
295#define DCM_WRAP 0 /* MUST be consistant with MAX_INT_BUFSZ */
296
297int idma_init (void)
298{
299 uint memaddr;
300
301 immap->im_cpm.cp_rccr &= ~0x00F3FFFF;
302 immap->im_cpm.cp_rccr |= 0x00A00A00;
303
304 memaddr = dpalloc (sizeof (pram_idma_t), 64);
305
306 *(volatile u16 *)&immap->im_dprambase16
307 [PROFF_IDMA2_BASE / sizeof(u16)] = memaddr;
308 piptr = (volatile pram_idma_t *) ((uint) (immap) + memaddr);
309
310 piptr->pi_resv1 = 0; /* manual says: clear it */
311 piptr->pi_dcmbits.b.b_fb = 0;
312 piptr->pi_dcmbits.b.b_lp = 1;
313 piptr->pi_dcmbits.b.b_erm = 0;
314 piptr->pi_dcmbits.b.b_dt = 0;
315
316 memaddr = (uint) dpalloc (sizeof (ibd_t), 64);
317 piptr->pi_ibase = piptr->pi_ibdptr = (volatile short) memaddr;
318 bdf = (volatile ibd_t *) ((uint) (immap) + memaddr);
319 bdf->ibd_bits.b.b_valid = 0;
320
321 memaddr = (uint) dpalloc (64, 64);
322 piptr->pi_dprbuf = (volatile ushort) memaddr;
323 piptr->pi_dcmbits.b.b_wrap = 4;
324 piptr->pi_ssmax = 32;
325
326 piptr->pi_sts = piptr->pi_ssmax;
327 piptr->pi_dts = piptr->pi_ssmax;
328
329 return 1;
330}
331
332void dmadone_handler (void *arg)
333{
334 immap->im_sdma.sdma_idmr2 = (uchar) 0x0;
335
336 *dmadonep = 1;
337
338 return;
339}
340
341
342static uint dpbase = 0;
343
344uint dpalloc (uint size, uint align)
345{
346 volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
347 uint retloc;
348 uint align_mask, off;
349 uint savebase;
350
351 /* Pointer to initial global data area */
352
353 if (dpinit_done == 0) {
354 dpbase = gd->arch.dp_alloc_base;
355 dpinit_done = 1;
356 }
357
358 align_mask = align - 1;
359 savebase = dpbase;
360
361 if ((off = (dpbase & align_mask)) != 0)
362 dpbase += (align - off);
363
364 if ((off = size & align_mask) != 0)
365 size += align - off;
366
367 if ((dpbase + size) >= gd->arch.dp_alloc_top) {
368 dpbase = savebase;
369 printf ("dpalloc: ran out of dual port ram!");
370 return 0;
371 }
372
373 retloc = dpbase;
374 dpbase += size;
375
376 memset ((void *) &immr->im_dprambase[retloc], 0, size);
377
378 return (retloc);
379}