Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
/*	$NetBSD: e500reg.h,v 1.17 2022/05/24 20:50:18 andvar Exp $	*/
/*-
 * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
 * All rights reserved.
 *
 * This code is derived from software contributed to The NetBSD Foundation
 * by Raytheon BBN Technologies Corp and Defense Advanced Research Projects
 * Agency and which was developed by Matt Thomas of 3am Software Foundry.
 *
 * This material is based upon work supported by the Defense Advanced Research
 * Projects Agency and Space and Naval Warfare Systems Center, Pacific, under
 * Contract No. N66001-09-C-2073.
 * Approved for Public Release, Distribution Unlimited
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#include <sys/cdefs.h>

#ifdef _LOCORE
#define	__PPCBIT(n)	(1 << (31 - (n)))
#define	__PPCBITS(m, n)	(((1 << ((n) - (m) + 1)) - 1) << (31 - (m)))
#else
#define	__PPCBIT(n)	__BIT(31-(n))
#define	__PPCBITS(m,n)	__BITS(31-(n),31-(m))
#endif

#define	GUR_SIZE		0x100000
#define	GUR_BPTR		0x0020		/* Boot Page Translation */
#define	BPTR_EN			__PPCBIT(0)	/* Boot Page Enabled */
#define	BPTR_BOOT_PAGE		__PPCBITS(8,31)	/* high 24 bits of phys addr */

#define	DDRC1_BASE		0x02000
#define	DDRC2_BASE		0x06000
#define	DDRC_SIZE		0x01000

#ifdef DDRC_PRIVATE
#define	CS_BNDS(n)		(0x000 + 0x008 * (n))
#define	BNDS_SA			__PPCBITS(4,15)
#define	BNDS_SA_GET(n)		(((n) & BNDS_SA) << 8)
#define	BNDS_EA			__PPCBITS(20,31)
#define	BNDS_EA_GET(n)		(((n) & BNDS_EA) << 24)
#define	BNDS_SIZE_GET(n)	\
	((((((n) & BNDS_EA) + __LOWEST_SET_BIT(BNDS_EA)) << 16) - (((n) & BNDS_SA))) << 8)
#define	CS_CONFIG(n)		(0x080 + 0x004 * (n))
#define CS_CONFIG_EN		__PPCBIT(0)

#define	DDR_SDRAM_CFG		0x110
#define	SDRAM_CFG_MEM_EN	__PPCBIT(0)
#define	SDRAM_CFG_SREN		__PPCBIT(1)
#define	SDRAM_CFG_ECC_EN	__PPCBIT(2)
#define	SDRAM_CFG_RDEN		__PPCBIT(3)
#define	SDRAM_CFG_TYPE		__PPCBITS(5,7)
#define	SDRAM_CFG_TYPE_DDR2	3
#define	SDRAM_CFG_TYPE_DDR3	7
#define	SDRAM_CFG_DYN_PWR	__PPCBIT(10)
#define	SDRAM_CFG_DBW		__PPCBITS(11,12)
#define	SDRAM_CFG_DBW_64BIT	0
#define	SDRAM_CFG_DBW_32BIT	1

#define	CAPTURE_DATA_HI		0xe20
#define	CAPTURE_DATA_LO		0xe24
#define	CAPTURE_ECC		0xe28

#define	ERR_DETECT		0xe40
#define	ERR_DISABLE		0xe44
#define	ERR_INT_EN		0xe48

#define	ERR_MMEE		__PPCBIT(0)
#define	ERR_APEE		__PPCBIT(23)
#define	ERR_ACEE		__PPCBIT(24)
#define	ERR_MBEE		__PPCBIT(28)
#define	ERR_SBEE		__PPCBIT(29)
#define	ERR_MSEE		__PPCBIT(31)

#define	CAPTURE_ATTRIBUTES	0xe4c
#define	CATTR_BNUM		__PPCBITS(1,3)
#define	CATTR_TSIZ		__PPCBITS(5,7)
#define	CATTR_TSRC		__PPCBITS(11,15)
#define	CATTR_TTYP		__PPCBITS(18,19)
#define	CATTR_VLD		__PPCBIT(31)

#define	CAPTURE_ADDRESS		0xe50
#define	CAPTURE_EXT_ADDRESS	0xe54

#define	ERR_SBE			0xe58
#define	ERR_SBE_SBET		__PPCBITS(8,15)
#define	ERR_SBE_SBEC		__PPCBITS(24,31)

#endif /* DDRC_PRIVATE */

#define	GPIO_BASE		0x0fc00
#define	GPIO_SIZE		0x00020

#ifdef GPIO_PRIVATE

#define GPDIR			0x00 /* GPIO direction register */
#define GPODR			0x04 /* GPIO open drain register */
#define GPDAT			0x08 /* GPIO data register */
#define GPIER			0x0C /* GPIO interrupt event register */
#define GPIMR			0x10 /* GPIO interrupt mask register */
#define GPICR			0x14 /* GPIO external interrupt control register */

#endif /* GPIO_PRIVATE */

#define	PCIE1_BASE		0x0a000
#define	PCIE2_MPC8572_BASE	0x09000	/* P2020 too */
#define	PCIE3_MPC8572_BASE	0x08000	/* P2020 too */
#define	PCIX1_MPC8548_BASE	0x08000
#define	PCIX2_MPC8548_BASE	0x09000
#define	PCIE2_MPC8544_BASE	0x09000	/* MPC8536 too */
#define	PCIE3_MPC8544_BASE	0x0b000	/* MPC8536 too */
#define	PCIX1_MPC8544_BASE	0x08000	/* MPC8536 too */
#define	PCI_SIZE		0x01000

#ifdef PCI_PRIVATE

/* PCI Express Configuration Access Registers */
#define PEX_CONFIG_ADDR		0x000 /* PCI Express configuration address register */
#define	PCI_CONFIG_ADDR		PEX_CONFIG_ADDR
#define	PEX_CONFIG_ADDR_EN	__PPCBIT(0)
#define	PEX_CONFIG_ADDR_TAG(b,d,f,r) (((b) << 16) | ((d) << 11) | ((f) << 8) | (r))
#define PEX_CONFIG_DATA		0x004 /* PCI Express configuration data register */
#define	PCI_CONFIG_DATA		PEX_CONFIG_DATA
#define	PCI_INT_ACK		0x008 /* PCI Interrupt Acknowledge */
#define PEX_OTB_CPL_TOR		0x00C /* PCI Express outbound completion timeout register */
#define PEX_CONF_RTY_TOR	0x010 /* PCI Express configuration retry timeout register */
#define PEX_CONFIG		0x014 /* PCI Express configuration register  */

/* PCI Express Power Management Event & Message Registers */
#define PEX_PME_MES_DR		0x020 /* PCI Express PME & message detect register */
#define PEX_PME_MES_DISR	0x024 /* PCI Express PME & message disable register */
#define PEX_PME_MES_IER		0x028 /* PCI Express PME & message interrupt enable register */
#define PEX_PMCR		0x02C /* PCI Express power management command register */

/* PCI Express IP Block Revision Registers */
#define PEX_IP_BLK_REV1		0xBF8 /* IP block revision register 1 */
#define PEX_IP_BLK_REV2		0xBFC /* IP block revision register 2 */

/* PCI Express / PCI-X ATMU Registers */
#define	PEXOWAR_EN		__PPCBIT(0) /* enable window */
#define	PEXOWAR_ROE		__PPCBIT(3) /* relaxed ordering enable */
#define	PEXOWAR_NS		__PPCBIT(4) /* no snoop enable */
#define	PEXOWAR_TC		__PPCBITS(8,10) /* traffic class PCIEX only */
#define	PEXOWAR_TC0		__SHIFTIN(0, PEXOWAR_TC)
#define	PEXOWAR_TC1		__SHIFTIN(1, PEXOWAR_TC)
#define	PEXOWAR_TC2		__SHIFTIN(2, PEXOWAR_TC)
#define	PEXOWAR_TC3		__SHIFTIN(3, PEXOWAR_TC)
#define	PEXOWAR_TC4		__SHIFTIN(4, PEXOWAR_TC)
#define	PEXOWAR_TC5		__SHIFTIN(5, PEXOWAR_TC)
#define	PEXOWAR_TC6		__SHIFTIN(6, PEXOWAR_TC)
#define	PEXOWAR_TC7		__SHIFTIN(7, PEXOWAR_TC)
#define	PEXOWAR_RTT		__PPCBITS(12,15) /* read transaction type */
#define	PEXOWAR_RTT_CONF	__SHIFTIN(2, PEXOWAR_RTT) /* PCIEX only */
#define	PEXOWAR_RTT_MEM		__SHIFTIN(4, PEXOWAR_RTT)
#define	PEXOWAR_RTT_IO		__SHIFTIN(8, PEXOWAR_RTT)
#define	PEXOWAR_WTT		__PPCBITS(16,19) /* write transaction type */
#define	PEXOWAR_WTT_CONF	__SHIFTIN(2, PEXOWAR_WTT) /* PCIEX only */
#define	PEXOWAR_WTT_MEM		__SHIFTIN(4, PEXOWAR_WTT)
#define	PEXOWAR_WTT_IO		__SHIFTIN(8, PEXOWAR_WTT)
#define	PEXOWAR_OWS		__PPCBITS(26,31) /* encoded as 2^(N+1) bytes */

/* PCI Express / PCI-X ATMU Registers */
#define	PEXIWAR_EN		__PPCBIT(0) /* enable window */
#define	PEXIWAR_PF		__PPCBIT(3) /* prefetchable */
#define	PEXIWAR_TRGT		__PPCBITS(8,11) /* traffic class PCIEX only */
#define	PEXIWAR_TRGT_PCI1	__SHIFTIN(0, PEXIWAR_TRGT)
#define	PEXIWAR_TRGT_PCI2	__SHIFTIN(1, PEXIWAR_TRGT)
#define	PEXIWAR_TRGT_PCIEX	__SHIFTIN(2, PEXIWAR_TRGT)
#define	PEXIWAR_TRGT_SRIO	__SHIFTIN(12, PEXIWAR_TRGT)
#define	PEXIWAR_TRGT_LOCALMEM	__SHIFTIN(15, PEXIWAR_TRGT)
#define	PEXIWAR_RTT		__PPCBITS(12,15) /* read transaction type */
#define	PEXIWAR_RTT_MEM		__SHIFTIN(4, PEXIWAR_RTT)
#define	PEXIWAR_RTT_MEM_NOSNOOP	__SHIFTIN(4, PEXIWAR_RTT)
#define	PEXIWAR_RTT_MEM_SNOOP	__SHIFTIN(5, PEXIWAR_RTT)
#define	PEXIWAR_RTT_MEM_ULCKL2	__SHIFTIN(7, PEXIWAR_RTT)
#define	PEXIWAR_WTT		__PPCBITS(16,19) /* write transaction type */
#define	PEXIWAR_WTT_MEM_NOSNOOP	__SHIFTIN(4, PEXIWAR_WTT)
#define	PEXIWAR_WTT_MEM_SNOOP	__SHIFTIN(5, PEXIWAR_WTT)
#define	PEXIWAR_WTT_MEM_ALLOL2	__SHIFTIN(6, PEXIWAR_WTT)
#define	PEXIWAR_WTT_MEM_ALCKL2	__SHIFTIN(7, PEXIWAR_WTT)
#define	PEXIWAR_IWS		__PPCBITS(26,31) /* encoded as 2^(N+1) bytes */
#define	PEXIWAR_IWS_GET(n)	__SHIFTOUT((n), PEXIWAR_IWS)

/* Outbound Window 0 (Default) */
#define PEXOTAR0		0xC00 /* PCI Express outbound translation address register 0 (default) */
#define PEXOTEAR0		0xC04 /* PCI Express outbound translation extended address register 0 (default) */
#define PEXOWAR0		0xC10 /* PCI Express outbound window attributes register 0 (default) */

/* Outbound Window 1 */
#define PEXOTAR1		0xC20 /* PCI Express outbound translation address register 1 */
#define PEXOTEAR1		0xC24 /* PCI Express outbound translation extended address register 1 */
#define PEXOWBAR1		0xC28 /* PCI Express outbound window base address register 1 */
#define PEXOWAR1		0xC30 /* PCI Express outbound window attributes register 1 */

/* Outbound Window 2 */
#define PEXOTAR2		0xC40 /* PCI Express outbound translation address register 2 */
#define PEXOTEAR2		0xC44 /* PCI Express outbound translation extended address register 2 */
#define PEXOWBAR2		0xC48 /* PCI Express outbound window base address register 2 */
#define PEXOWAR2		0xC50 /* PCI Express outbound window attributes register 2 */

/* Outbound Window 3 */
#define PEXOTAR3		0xC60 /* PCI Express outbound translation address register 3 */
#define PEXOTEAR3		0xC64 /* PCI Express outbound translation extended address register 3 */
#define PEXOWBAR3		0xC68 /* PCI Express outbound window base address register 3 */
#define PEXOWAR3		0xC70 /* PCI Express outbound window attributes register 3 */

/* Outbound Window 4 */
#define PEXOTAR4		0xC80 /* PCI Express outbound translation address register 4 */
#define PEXOTEAR4		0xC84 /* PCI Express outbound translation extended address register 4 */
#define PEXOWBAR4		0xC88 /* PCI Express outbound window base address register 4 */
#define PEXOWAR4		0xC90 /* PCI Express outbound window attributes register 4 */

/* Inbound Window 3 */
#define PEXITAR3		0xDA0 /* PCI Express inbound translation address register 3 */
#define PEXIWBAR3		0xDA8 /* PCI Express inbound window base address register 3 */
#define PEXIWBEAR3		0xDAC /* PCI Express inbound window base extended address register 3 */
#define PEXIWAR3		0xDB0 /* PCI Express inbound window attributes register 3 */

/* Inbound Window 2 */
#define PEXITAR2		0xDC0 /* PCI Express inbound translation address register 2 */
#define PEXIWBAR2		0xDC8 /* PCI Express inbound window base address register 2 */
#define PEXIWBEAR2		0xDCC /* PCI Express inbound window base extended address register 2 */
#define PEXIWAR2		0xDD0 /* PCI Express inbound window attributes register 2 */

/* Inbound Window 1 */
#define PEXITAR1		0xDE0 /* PCI Express inbound translation address register 1 */
#define PEXIWBAR1		0xDE8 /* PCI Express inbound window base address register 1 */
#define PEXIWAR1		0xDF0 /* PCI Express inbound window attributes register 1 */

/* PCI Express Error Management Registers */
#define PEX_ERR_DR		0xE00 /* PCI Express error detect register */
#define	PEXERRDR_ICCA		__PPCBIT(14)
#define PEX_ERR_EN		0xE08 /* PCI Express error interrupt enable register */
#define PEX_ERR_DISR		0xE10 /* PCI Express error disable register */
#define PEX_ERR_CAP_STAT	0xE20 /* PCI Express error capture status register */
#define PEX_ERR_CAP_R0		0xE28 /* PCI Express error capture register 0 */
#define PEX_ERR_CAP_R1		0xE2C /* PCI Express error capture register 1 */
#define PEX_ERR_CAP_R2		0xE30 /* PCI Express error capture register 2 */
#define PEX_ERR_CAP_R3		0xE34 /* PCI Express error capture register 3 */

/* PCI Express Private Configuration Space */

#define PEX_LTSSM		0x404
#define	LTSSM_L0		16

#define	PCI_PBFR		0x44	/* Bus Function Register */
#define	PBFR_PAH		__BIT(0)

#endif /* PCI_PRIVATE */

#define	OPENPIC_BASE		0x40000
#define	OPENPIC_SIZE		0x40000

#define	L2CACHE_BASE		0x20000
#define	L2CACHE_SIZE		0x01000

#ifdef L2CACHE_PRIVATE
#define	L2CTL			0x000
#define	L2CTL_L2E		__PPCBIT(0)
#define	L2CTL_L2I		__PPCBIT(1)
#define	L2CTL_L2SIZ		__PPCBITS(2,3)
#define	L2CTL_L2SIZ_GET(x)	(1 << (17 + __SHIFTOUT((x), L2CTL_L2SIZ)))
#define	L2CTL_L2DO		__PPCBIT(9)
#define	L2CTL_L2IO		__PPCBIT(10)
#define	L2CTL_L2INTDIS		__PPCBIT(12)
#define	L2CTL_L2SRAM		__PPCBITS(13,15)
#define	L2CTL_L2LO		__PPCBIT(18)
#define	L2CTL_L2SLC		__PPCBIT(19)
#define	L2CTL_L2LFR		__PPCBIT(21)
#define	L2CTL_L2LFRID		__PPCBITS(22,23)
#define	L2CTL_L2STASHDIS	__PPCBIT(28)
#define	L2CTL_L2STASH		__PPCBITS(30,31)

#endif /* L2CACHE_PRIVATE */

#define	I2C1_BASE		0x3000
#define	I2C2_BASE		0x3100
#define	I2C_SIZE		0x0100

#ifdef I2C_PRIVATE
#define	I2CADR		0x000	/* i2c address register */
#define	I2CFDR		0x004	/* i2c frequency divider register */
#define	I2CCR		0x008	/* i2c control register */
#define	I2CSR		0x00c	/* i2c status register */
#define	I2CDR		0x010	/* i2c data register */
#define	I2CDFSSR	0x014	/* i2c address register */
#endif /* I2C_PRIVATE */

#define	DUART1_BASE	0x4500
#define	DUART2_BASE	0x4600
#define	DUART_SIZE	0x0100

#define	SPI_BASE	0x7000	/* MPC8536 */
#define	SPI_SIZE	0x1000

#ifdef SPI_PRIVATE
#define	SPMODE		0x000	/* mode register */
#define	SPMODE_EN	__PPCBIT(0)	/* Enable eSPI: 0=disabled, 1=enabled */
#define	SPMODE_LOOP	__PPCBIT(1)	/* Loop mode: 0=normal, 1=loopback */
#define	SPMODE_OD	__PPCBIT(2)	/* P1023: Open drain mode: 0=actively driven, 1=open drain */
#define	SPMODE_HO_ADJ	__PPCBITS(13,15) /* Data output hold adjustment */
#define	SPMODE_TXTHR	__PPCBITS(18,23) /* Tx FIFO Threshold: 1-32 */
#define	SPMODE_RXTHR	__PPCBITS(27,31) /* Rx FIFO threshold: 0-31 */
#define	SPIE		0x004	/* event register */
#define	SPIE_RXCNT	__PPCBITS(2,7)	/* current number of full Rx FIFO bytes */
#define	SPIE_TXCNT	__PPCBITS(10,15) /* current number of full Tx FIFO bytes */
#define	SPIE_TXE	__PPCBIT(16)	/* Tx FIFO is empty */
#define	SPIE_DON	__PPCBIT(17)	/* Last character was transmitted */
#define	SPIE_RXT	__PPCBIT(18)	/* Rx FIFO has more than RXTHR bytes */
#define	SPIE_RXF	__PPCBIT(19)	/* Rx FIFO is full */
#define	SPIE_TXT	__PPCBIT(20)	/* Tx FIFO has less than TXTHR bytes */
#define	SPIE_RNE	__PPCBIT(22)	/* Not empty: 0=empty, 1=not empty */
#define	SPIE_TNF	__PPCBIT(23)	/* Tx FIFO not full: 0=full, 1=not full */
#define	SPIM		0x008	/* mask register */
#define	SPIM_TXE	__PPCBIT(16)
#define	SPIM_DON	__PPCBIT(17)
#define	SPIM_RXT	__PPCBIT(18)
#define	SPIM_RXF	__PPCBIT(19)
#define	SPIM_TXT	__PPCBIT(20)
#define	SPIM_RNE	__PPCBIT(22)
#define	SPIM_TNF	__PPCBIT(23)
#define	SPCOM		0x00c	/* command register */
#define	SPCOM_CS	__PPCBITS(0,1)	/* Chip select: 0=CS0, 1=CS1, 2=CS2(P1025), 3=CS3(P1025) */
#define	SPCOM_RXDELAY	__PPCBIT(2)	/* 0=normal eSPI operation */
#define	SPCOM_DO	__PPCBIT(3)	/* 0=normal eSPI operation, 1=Winbond dual output read */
#define	SPCOM_TO	__PPCBIT(4)	/* Transmit only: 0=normal operation, 1=No reception is done for the frame */
#define	SPCOM_HLD	__PPCBIT(5)	/* 0=normal operation, 1=Mask first generated SPI_CLK */
#define	SPCOM_LS	__PPCBIT(6)	/* P1023: Late sample: 0=normal operation, 1=Late data sample */
#define	SPCOM_RXSKIP	__PPCBITS(8,15)	/* if RxSKIP != 0: Number of characters skipped for reception from frame start */
#define	SPCOM_TRANLEN	__PPCBITS(16,31) /* Transaction length */
#define	SPITF		0x010	/* transmit FIFO access register */
#define	SPIRF		0x014	/* receive FIFO access register */
#define	SPMODE0		0x020	/* CS0 mode register */
#define	SPMODE1		0x024	/* CS1 mode register */
#define	SPMODE2		0x028	/* CS2 mode register (P1025) */
#define	SPMODE3		0x02c	/* CS3 mode register (P1025) */
#define	SPMODEn(n)	(0x020+(n)*4)
#define	SPMODEn_CI	__PPCBIT(0)	/* Clock invert: 0=inactive state of SPI_CLK is low, 1=high */
#define	SPMODEn_CP	__PPCBIT(1)	/* Clock phase: SPI_CLK starts toggling at the middle of the data transfer, 1=beginning */
#define	SPMODEn_REV	__PPCBIT(2)	/* Reverse data mode: 0=LSB of the character sent and received first, 1=MSB */
#define	SPMODEn_DIV16	__PPCBIT(3)	/* Divide by 16: 0=System clock, 1=System clock/16 */
#define	SPMODEn_PM	__PPCBITS(4,7)	/* Prescale modulus select */
#define	SPMODEn_ODD	__PPCBIT(8)	/* 0=Even division, 1=Odd dividion */
#define	SPMODEn_POL	__PPCBIT(11)	/* CS polarity: 0=Asserted high/Negated low, 1=Asserted low/Negated high */
#define	SPMODEn_LEN	__PPCBITS(12,15) /* Character length in bits per character */
#define	SPMODEn_CSBEF	__PPCBITS(16,19) /* CS assertion time in bits before frame start */
#define	SPMODEn_CSAFT	__PPCBITS(20,23) /* CS assertion time in bits after frame end */
#define	SPMODEn_CSCG	__PPCBITS(24,28) /* Clock gap */
#endif

#define	SATA1_BASE	0x18000	/* MPC8536 */
#define	SATA2_BASE	0x19000	/* MPC8536 */
#define	SATA_SIZE	0x01000

#define	USB1_BASE	0x22100	/* MPC8536 */
#define	USB2_BASE	0x23100	/* MPC8536 */
#define	USB3_BASE	0x2b100	/* MPC8536 */
#define	USB_SNOOP1	0x0300	/* DMA Snooping Register 1 */
#define	USB_SNOOP2	0x0304	/* DMA Snooping Register 2 */
#define	USB_CONTROL	0x0400	/* USB General Purpose Register */
#define	USB_EN		__PPCBIT(29)
#define	USB_ULPI_INT_EN	__PPCBIT(31)
#define	USB_SIZE	0x00f00

#define	SNOOP_2GB	0x1e

#define	ETSEC1_BASE	0x24000
#define	ETSEC2_BASE	0x25000
#define	ETSEC3_BASE	0x26000
#define	ETSEC4_BASE	0x27000
#define	ETSEC1_G0_BASE	0xB0000
#define	ETSEC2_G0_BASE	0xB1000
#define	ETSEC3_G0_BASE	0xB2000
#define	ETSEC1_G1_BASE	0xB4000
#define	ETSEC2_G1_BASE	0xB5000
#define	ETSEC3_G1_BASE	0xB6000
#define	ETSEC_SIZE	0x01000

#define	ESDHC_BASE	0x2e000
#define	ESDHC_SIZE	0x01000

#ifdef ESDHC_PRIVATE

#define	DCR		0x40c		/* DMA Control Register */

#define	DCR_SNOOP	__PPCBIT(25)	/* DMA transactions are snooped */
#define	DCR_RD_SAFE	__PPCBIT(29)	/* memory is read safe */
#define	DCR_RD_PFE	__PPCBIT(30)	/* memory is prefetch safe */
#define	DCR_RD_PF_SIZE	__PPCBIT(31)	/* prefetch size is 32-bytes */

#endif

#define	GLOBAL_BASE	0xe0000
#define	GLOBAL_SIZE	0x01000

#ifdef GLOBAL_PRIVATE

/* Power-On Reset Configuration Values */
#define PORPLLSR	0x000 /* POR PLL ratio status register */
#define	E500_RATIO2	__PPCBITS(2,7)
#define	E500_RATIO2_GET(n) __SHIFTOUT(n, E500_RATIO2)
#define	E500_RATIO	__PPCBITS(10,15)
#define	E500_RATIO_GET(n) __SHIFTOUT(n, E500_RATIO)
#define	PCI1_CLK_SEL	__PPCBIT(16)
#define	PCI2_CLK_SEL	__PPCBIT(17)
#define	PLAT_RATIO	__PPCBITS(26,30)
#define	PLAT_RATIO_GET(n) __SHIFTOUT(n, PLAT_RATIO)
#define PORBMSR		0x004 /* POR boot mode status register */
#define	PORBMSR_BCFG	__PPCBITS(0,1)
#define	PORBMSR_HA	__PPCBITS(13,15)
#define	PORBMSR_HA_GET(n) __SHIFTOUT(m, PORBMSR_HA)
#define	PORBMSR_HA_PEXSRIO_AGENT	0 /* PCI Express & SRIO agent mode */
#define	PORBMSR_HA_SRIO_AGENT		1 /* SRIO agent mode */
#define	PORBMSR_HA_PEX_AGENT		2 /* PCI Express agent mode */
#define	PORBMSR_HA_PEXPCI_AGENT2	3 /* PCI[-X] & PCI Express agent mode */
#define	PORBMSR_HA_PCISRIO_AGENT2	4 /* PCI[-X] & SRIO mode */
#define	PORBMSR_HA_SRIO_AGENT2		5 /* SRIO agent mode */
#define	PORBMSR_HA_PCI_AGENT2		6 /* PCI[-X] agent mode */
#define	PORBMSR_HA_HOST			7 /* Host mode */
#define PORIMPSCR	0x008 /* POR I/O impedance status and control register */
#define PORDEVSR	0x00C /* POR I/O device status register */
#define	PORDEVSR_ECW1		__PPCBIT(0)
#define	PORDEVSR_ECW2		__PPCBIT(1)
#define	PORDEVSR_SGMII1_DIS1	__PPCBIT(2)
#define	PORDEVSR_SGMII1_DIS2	__PPCBIT(3)
#define	PORDEVSR_SGMII1_DIS3	__PPCBIT(4)
#define	PORDEVSR_SGMII1_DIS4	__PPCBIT(5)
#define	PORDEVSR_ECP1		__PPCBITS(6,7)
#define	PORDEVSR_PCI1		__PPCBIT(8)
#define	PCI1_PCIX		0
#define	PCI1_PCI1		1
#define	PORDEVSR_IOSEL_P1023	__PPCBITS(9,10)
#define	IOSEL_P1023_PCIE12_X1		0
#define	IOSEL_P1023_PCIE123_X1		1
#define	IOSEL_P1023_PCIE123_X1_SGMII2	2
#define	IOSEL_P1023_PCIE12_X1_SGMII12	3
#define	PORDEVSR_IOSEL		__PPCBITS(9,12)
#define	IOSEL_MPC8536_OFF		0x01
#define	IOSEL_MPC8536_PCIE1_X4		0x02
#define	IOSEL_MPC8536_PCIE1_X8		0x03
#define	IOSEL_MPC8536_PCIE12_X4		0x05
#define	IOSEL_MPC8536_PCIE1_X4_PCI23_X2	0x07
#define	IOSEL_MPC8544_OFF		0x00
#define	IOSEL_MPC8544_SGMII_ON		0x01
#define	IOSEL_MPC8544_PCIE1_ON		0x02
#define	IOSEL_MPC8544_PCIE1_SGMII_ON	0x03
#define	IOSEL_MPC8544_PCIE12_ON		0x04
#define	IOSEL_MPC8544_PCIE12_SGMII_ON	0x05
#define	IOSEL_MPC8544_PCIE123_ON	0x06
#define	IOSEL_MPC8544_PCIE123_SGMII_ON	0x07
#define	IOSEL_MPC8548_SRIO2500_PCIE1_X4	3
#define	IOSEL_MPC8548_SRIO1250_PCIE1_X4	4
#define	IOSEL_MPC8548_SRIO3125		5
#define	IOSEL_MPC8548_SRIO1250		6
#define	IOSEL_MPC8548_PCIE1_X8		7
#define IOSEL_MPC8572_PCIE1_X4		2
#define IOSEL_MPC8572_PCIE12_X4		3
#define IOSEL_MPC8572_SRIO2500		6
#define IOSEL_MPC8572_PCIE1_X4_23_X2	7
#define	IOSEL_MPC8572_SRIO2500_PCIE1_X4	11
#define	IOSEL_MPC8572_SRIO1250_PCIE1_X4	12
#define	IOSEL_MPC8572_SRIO3125		13
#define	IOSEL_MPC8572_SRIO1250		14
#define	IOSEL_MPC8572_PCIE1_X8		15
#define	IOSEL_P20x0_PCIE1_X1		0
#define	IOSEL_P20x0_PCIE12_X1_3_X2	2
#define	IOSEL_P20x0_PCIE13_X2		4
#define	IOSEL_P20x0_PCIE1_X4		6
#define	IOSEL_P20x0_PCIE1_X1_SRIO2500_1X	13
#define	IOSEL_P20x0_PCIE12_X1_SGMII23	14
#define	IOSEL_P20x0_PCIE1_X2_SGMII23	15
#define	IOSEL_P1025_PCIE1_X1		0	/* same at P20x10 */
#define	IOSEL_P1025_PCIE1_X4		6	/* same at P20x10 */
#define	IOSEL_P1025_PCIE12_X1_SGMII23	14	/* same at P20x10 */
#define	IOSEL_P1025_PCIE1_X2_SGMII23	15	/* same at P20x10 */
#define	PORDEVSR_PCI2_ARB	__PPCBIT(13)
#define	PORDEVSR_PCI1_ARB	__PPCBIT(14)
#define	PORDEVSR_PCI32		__PPCBIT(15)
#define	PCI32_FALSE		0
#define	PCI32_TRUE		1
#define	PORDEVSR_PCI1_SPD	__PPCBIT(16)
#define	PORDEVSR_PCI2_SPD	__PPCBIT(17)
#define	PORDEVSR_SYS_SPD	__PPCBIT(17)	/* MPC8536 */
#define	PORDEVSR_CORE_SPD	__PPCBIT(18)	/* MPC8536 */
#define	PORDEVSR_ECP2		__PPCBITS(18,19)
#define	PORDEVSR_ECP3		__PPCBITS(20,21)
#define	PORDEVSR_ECP4		__PPCBITS(22,23)
#define	PORDEVSR_FEC_DIS	__PPCBIT(24)
#define	PORDEVSR_RTPE		__PPCBIT(25)
#define	PORDEVSR_RIO_CTLS	__PPCBIT(28)
#define	PORDEVSR_DEV_ID		__PPCBITs(29,31)
#define PORDBGMSR	0x010 /* POR debug mode status register */
#define PORDEVSR2	0x014 /* POR I/O device status register 2 */
#define GPPORCR		0x020 /* General-purpose POR configuration register */

/* Signal Multiplexing and GPIO Controls */
#define GPIOCR		0x030 /* GPIO control register */
#define	GPIOCR_TX2	__PPCBIT(6)	/* Enable TSEC2_TX[7:0] as GP output */
#define	GPIOCR_RX2	__PPCBIT(7)	/* Enable TSEC2_RX[7:0] as GP input */
#define	GPIOCR_PCIOUT	__PPCBIT(14)	/* Enable PCI2_AD[15:8] as GP output */
#define	GPIOCR_PCIIN	__PPCBIT(15)	/* Enable PCI2_AD[7:0] as GP input */
#define	GPIOCR_GPOUT	__PPCBIT(22)	/* Enable GPOUT[24:31] as GP output */
#define GPOUTDR		0x040 /* General-purpose output data register */
#define GPOUTDR_TX2	0x040 /* General-purpose output data register */
#define GPOUTDR_PCI	0x041 /* General-purpose output data register */
#define GPOUTDR_GPOUT	0x043 /* General-purpose output data register */
#define GPINDR		0x050 /* General-purpose input data register */
#define	GPINDR_RX2	0x059
#define	GPINDR_PCI	0x051

#define PMUXCR		0x060 /* Alternate function signal multiplex control */
#define	PMUXCR_SD_DATA	__PPCBIT(0)
#define	PMUXCR_SDHC_CD	__PPCBIT(1)
#define	PMUXCR_SDHC_WP	__PPCBIT(2)
#define	PMUXCR_PCI_REQGNT3 __PPCBIT(3)
#define	PMUXCR_TSEC1_TS __PPCBIT(3)
#define	PMUXCR_PCI_REQGNT4 __PPCBIT(4)
#define	PMUXCR_TSEC2_TS __PPCBIT(4)
#define	PMUXCR_USB1	__PPCBIT(5)
#define	PMUXCR_TSEC3_TS __PPCBIT(5)
#define	PMUXCR_USB2	__PPCBIT(6)
#define	PMUXCR_USB_PCTL	__PPCBITS(6,5)
#define	PMUXCR_USB	__PPCBIT(6)
#define	PMUXCR_TSEC1	__PPCBIT(14)
#define	PMUXCR_DMA0	__PPCBIT(14)
#define	PMUXCR_DMA2	__PPCBIT(15)
#define	PMUXCR_QE0	__PPCBIT(16)
#define	PMUXCR_QE1	__PPCBIT(17)
#define	PMUXCR_QE2	__PPCBIT(18)
#define	PMUXCR_QE3	__PPCBIT(19)
#define	PMUXCR_QE8	__PPCBIT(24)
#define	PMUXCR_QE9	__PPCBIT(25)
#define	PMUXCR_QE10	__PPCBIT(26)
#define	PMUXCR_QE11	__PPCBIT(27)
#define	PMUXCR_QE12	__PPCBIT(28)
#define	PMUXCR_DMA1	__PPCBIT(30)
#define	PMUXCR_DMA3	__PPCBIT(31)

#define PMUXCR2		0x064 /* Alternate function signal multiplex control2 */

/* Device Disables */
#define DEVDISR		0x070 /* Device disable control */
#define	DEVDISR_PCI1	__PPCBIT(0)
#define	DEVDISR_QMAN_BMAN __PPCBIT(0)	/* P1023 */
#define	DEVDISR_PCI2	__PPCBIT(1)
#define	DEVDISR_FMAN	__PPCBIT(1)	/* P1023 */
#define	DEVDISR_PCIE	__PPCBIT(2)
#define	DEVDISR_MACSEC	__PPCBIT(3)	/* P1023 */
#define	DEVDISR_LBC	__PPCBIT(4)
#define	DEVDISR_PCIE2	__PPCBIT(5)
#define	DEVDISR_PCIE3	__PPCBIT(6)
#define	DEVDISR_SEC	__PPCBIT(7)
#define	DEVDISR_PME	__PPCBIT(8)
#define	DEVDISR_USB1	__PPCBIT(8)	/* MPC8536 */
#define	DEVDISR_TLU1	__PPCBIT(9)
#define	DEVDISR_USB2	__PPCBIT(9)	/* MPC8536 */
#define	DEVDISR_TLU2	__PPCBIT(10)
#define	DEVDISR_ESDHC_10 __PPCBIT(10)
#define	DEVDISR_USB3	__PPCBIT(10)	/* MPC8536 */
#define	DEVDISR_L2	__PPCBIT(11)	/* MPC8536 */
#define	DEVDISR_SRIO	__PPCBIT(12)
#define	DEVDISR_ESDHC_12 __PPCBIT(12)	/* MPC8536 */
#define	DEVDISR_RMSG	__PPCBIT(13)
#define	DEVDISR_SATA1	__PPCBIT(13)	/* MPC8536 */
#define	DEVDISR_DDR2_14	__PPCBIT(14)
#define	DEVDISR_DDR_15	__PPCBIT(15)
#define	DEVDISR_SPI_15	__PPCBIT(15)	/* MPC8536 */
#define	DEVDISR_E500	__PPCBIT(16)
#define	DEVDISR_DDR_16	__PPCBIT(16)	/* MPC8536 */
#define	DEVDISR_TB	__PPCBIT(17)
#define	DEVDISR_E500_1	__PPCBIT(18)
#define	DEVDISR_TB_1	__PPCBIT(19)
#define	DEVDISR_SATA2	__PPCBIT(20)	/* MPC8536 */
#define	DEVDISR_DMA	__PPCBIT(21)
#define	DEVDISR_DMA2	__PPCBIT(22)
#define	DEVDISR_SRDS2	__PPCBIT(22)	/* MPC8536 */
#define	DEVDISR_TSEC1	__PPCBIT(24)
#define	DEVDISR_TSEC2	__PPCBIT(25)
#define	DEVDISR_TSEC3	__PPCBIT(26)
#define	DEVDISR_TSEC4	__PPCBIT(27)
#define	DEVDISR_FEC	__PPCBIT(28)
#define	DEVDISR_SPI_28	__PPCBIT(28)	/* P2020 */
#define	DEVDISR_I2C	__PPCBIT(29)
#define	DEVDISR_DUART	__PPCBIT(30)
#define	DEVDISR_SRDS1	__PPCBIT(31)	/* MPC8536 */

/* Power Management Registers */
#define POWMGTCSR	0x080 /* Power management status and control register */

/* Interrupt and Reset Status and Control */
#define MCPSUMR		0x090 /* Machine check summary register */
#define RSTRSCR		0x094 /* Reset request status and control register */

/* Version Registers */
#define PVR		0x0A0 /* Processor version register */
#define SVR		0x0A4 /* System version register */

/* Control Pin Registers (GPIO) for P1025  */
#define	CPBASE(n)	(0x100+0x20*(n))	/* Control Pin (GPIO) base */
#define	CPODR		0x0000			/* Open Drain */
#define	CPDAT		0x0004			/* Output Data */
#define	CPDIR1		0x0008			/* Direction1 */
#define	CPDIR2		0x000c			/* Direction2 */
#define	CPPAR1		0x0010			/* Pin Assignment1 */
#define	CPPAR2		0x0014			/* Pin Assignment2 */

#define	CPDIR_DIS	0
#define	CPDIR_OUT	1
#define	CPDIR_IN	2
#define	CPDIR_INOUT	3

#define	CPPAR_FUNC0	0
#define	CPPAR_FUNC1	1
#define	CPPAR_FUNC2	2
#define	CPPAR_FUNC3	3

/* Status Registers */
#define RSTCR		0x0B0 /* Reset control register */
#define	HRESET_REQ	__PPCBIT(30) /* hardware reset request */
#define LBCVSELCR	0x0C0 /* LBC voltage select control register */
#define DDRCSR		0xB20 /* DDR calibration status register */
#define DDRCDR		0xB24 /* DDR control driver register */
#define DDRCLKDR	0xB28 /* DDR clock disable register */

/* Debug Control */
#define CLKOCR		0xE00 /* Clock out control register */
#define SRDSCR0		0xF04 /* LSerDes control register 0 */
#define SRDSCR1		0xF08 /* LSerDes control register 1 */
#define TSEC12IOOVCR	0xF28 /* eTSEC 1 & 2 overdrive control register */
#define TSEC34IOOVCR	0xF2C /* eTSEC 3 & 4 overdrive control register */
#endif /* GLOBAL_PRIVATE */

#define	LBC_BASE	0x5000
#define	LBC_SIZE	0x0fff

#ifdef LBC_PRIVATE

#define	BR_BA		__PPCBITS(0,16)
#define	BR_XBA		__PPCBITS(17,18)
#define	BR_PS		__PPCBITS(19,20)
#define	BR_PS_8BIT	__SHIFTIN(1,BR_PS)
#define	BR_PS_16BIT	__SHIFTIN(2,BR_PS)
#define	BR_PS_32BIT	__SHIFTIN(3,BR_PS)
#define	BR_DECC		__PPCBITS(21,22)
#define	BR_DECC_NONE	__SHIFTIN(0,BR_DECC)
#define	BR_DECC_PARITY	__SHIFTIN(1,BR_DECC)
#define	BR_DECC_RMWPAR	__SHIFTIN(2,BR_DECC)
#define	BR_WP		__PPCBIT(23)
#define	BR_MSEL		__PPCBITS(24,26)
#define	BR_MSEL_GPCM	__SHIFTIN(0,BR_MSEL)
#define	BR_MSEL_FCM	__SHIFTIN(1,BR_MSEL)
#define	BR_MSEL_SDRAM	__SHIFTIN(3,BR_MSEL)
#define	BR_MSEL_UPMA	__SHIFTIN(4,BR_MSEL)
#define	BR_MSEL_UPMB	__SHIFTIN(5,BR_MSEL)
#define	BR_MSEL_UPMC	__SHIFTIN(6,BR_MSEL)
#define	BR_ATOM		__PPCBITS(28,29)
#define	BR_ATOM_NONE	__SHIFTIN(0,BR_ATOM)
#define	BR_ATOM_RAWA	__SHIFTIN(1,BR_ATOM)
#define	BR_ATOM_WARA	__SHIFTIN(2,BR_ATOM)
#define	BR_V		__PPCBIT(31)

#define	OR_AM		__PPCBITS(0,16)
#define	OR_XAM		__PPCBITS(17,18)
#define	OR_BCTLD	__PPCBIT(19)
#define	OR_CSNT		__PPCBIT(20)
#define	OR_ACS		__PPCBITS(21,22)
#define	OR_XACS		__PPCBIT(23)
#define	OR_SCY		__PPCBITS(24,27)
#define	OR_SETA		__PPCBIT(28)
#define	OR_TRLX		__PPCBIT(29)
#define	OR_EHTR		__PPCBIT(30)
#define	OR_EAD		__PPCBIT(31)

#define	BRn(n)		(BR0 + 8*(n))
#define	ORn(n)		(OR0 + 8*(n))
#define BR0		0x000 /* Base register 0 */
#define OR0		0x004 /* Options register 0 */
#define BR1		0x008 /* Base register 1 */
#define OR1		0x00C /* Options register 1 */
#define BR2		0x010 /* Base register 2 */
#define OR2		0x014 /* Options register 2 */
#define BR3		0x018 /* Base register 3 */
#define OR3		0x01C /* Options register 3 */
#define BR4		0x020 /* Base register 4 */
#define OR4		0x024 /* Options register 4 */
#define BR5		0x028 /* Base register 5 */
#define OR5		0x02C /* Options register 5 */
#define BR6		0x030 /* Base register 6 */
#define OR6		0x034 /* Options register 6 */
#define BR7		0x038 /* Base register 7 */
#define OR7		0x03C /* Options register 7 */
#define MAR		0x068 /* UPM address register */
#define MAMR		0x070 /* UPMA mode register */
#define MBMR		0x074 /* UPMB mode register */
#define MCMR		0x078 /* UPMC mode register */
#define MRTPR		0x084 /* Memory refresh timer prescaler register */
#define MDR		0x088 /* UPM/FCM data register */
#define	MDR_AS3		__PPCBITS(0,7)
#define	MDR_AS2		__PPCBITS(8,15)
#define	MDR_AS1		__PPCBITS(16,23)
#define	MDR_AS0		__PPCBITS(24,31)
#define	LSOR		0x090 /* Special Operation Initiation register */
#define LSDMR		0x094 /* SDRAM mode register */
#define LURT		0x0A0 /* UPM refresh timer */
#define LSRT		0x0A4 /* SDRAM refresh timer */
#define LTESR		0x0B0 /* Transfer error status register */
#define	LTESR_BM	__PPCBIT(0)
#define	LTESR_FCT	__PPCBIT(1)
#define	LTESR_PAR	__PPCBIT(2)
#define	LTESR_WP	__PPCBIT(5)
#define	LTESR_ATMW	__PPCBIT(8)
#define	LTESR_ATMR	__PPCBIT(9)
#define	LTESR_CS	__PPCBIT(12)
#define	LTESR_UCC	__PPCBIT(30)
#define	LTESR_CC	__PPCBIT(31)
#define LTEDR		0x0B4 /* Transfer error disable register */
#define	LTEDR_BMD	__PPCBIT(0)
#define	LTEDR_FCTD	__PPCBIT(1)
#define	LTEDR_PARD	__PPCBIT(2)
#define	LTEDR_WPD	__PPCBIT(5)
#define	LTEDR_WARA	__PPCBIT(8)
#define	LTEDR_RAWA	__PPCBIT(9)
#define	LTEDR_CSD	__PPCBIT(12)
#define	LTEDR_UCCD	__PPCBIT(30)
#define	LTEDR_CCD	__PPCBIT(31)
#define LTEIR		0x0B8 /* Transfer error interrupt register */
#define	LTEIR_BMI	__PPCBIT(0)
#define	LTEIR_FCTI	__PPCBIT(1)
#define	LTEIR_PARI	__PPCBIT(2)
#define	LTEIR_WPI	__PPCBIT(5)
#define	LTEIR_WARA	__PPCBIT(8)
#define	LTEIR_RAWA	__PPCBIT(9)
#define	LTEIR_CSI	__PPCBIT(12)
#define	LTEIR_UCCI	__PPCBIT(30)
#define	LTEIR_CCI	__PPCBIT(31)
#define LTEATR		0x0BC /* Transfer error attributes register */
#define	LTEATR_RWB	__PPCBIT(3)
#define	LTEATR_SRCID	__PPCBITS(11,15)
#define	LTEATR_PB	__PPCBITS(16,19)
#define	LTEATR_BNK	__PPCBITS(20,27)
#define	LTEATR_V	__PPCBIT(31)
#define LTEAR		0x0C0 /* Transfer error address register */
#define	LTECCR		0x0C4 /* Transfer error ECC register */
#define	LTECCR_SBCE	__PPCBITS(12,15)
#define	LTECCR_MBUE	__PPCBITS(28,31)
#define LBCR		0x0D0 /* Configuration register */
#define LCRR		0x0D4 /* Clock ratio register */

#define	FMR		0x0E0 /* Flash Mode Register */
#define	FMR_CWTO	__PPCBITS(16,19)
#define	FMR_BOOT	__PPCBIT(20)
#define	FMR_ECCM	__PPCBIT(23)
#define	FMR_AL		__PPCBITS(26,27)
#define	FMR_OP		__PPCBITS(30,31)
#define	FIR		0x0E4 /* Flash Instruction Register */
#define	FIR_OP0		__PPCBITS(0,3)
#define	FIR_OP1		__PPCBITS(4,7)
#define	FIR_OP2		__PPCBITS(8,11)
#define	FIR_OP3		__PPCBITS(12,15)
#define	FIR_OP4		__PPCBITS(16,19)
#define	FIR_OP5		__PPCBITS(20,23)
#define	FIR_OP6		__PPCBITS(24,27)
#define	FIR_OP7		__PPCBITS(28,31)
#define	FIR_OP_NOP	0
#define	FIR_OP_CA	1	/* Issue current column address */
#define	FIR_OP_PA	2	/* Issue current block+page address */
#define	FIR_OP_UA	3	/* Issue user-defined address byte */
#define	FIR_OP_CM0	4	/* Issue command from FCR[CMD0] */
#define	FIR_OP_CM1	5	/* Issue command from FCR[CMD1] */
#define	FIR_OP_CM2	6	/* Issue command from FCR[CMD2] */
#define	FIR_OP_CM3	7	/* Issue command from FCR[CMD3] */
#define	FIR_OP_WB	8	/* Write FBCR bytes of data */
#define	FIR_OP_WS	9	/* Write one byte of data from MDR */
#define	FIR_OP_RB	10	/* Read FBCR bytes of data */
#define	FIR_OP_RS	11	/* Read one byte of data into MDR */
#define	FIR_OP_CW0	12	/* Wait for LFRB then FCR[CMD0] */
#define	FIR_OP_CW1	13	/* Wait for LFRB then FCR[CMD1] */
#define	FIR_OP_RBW	14	/* Wait for LFRB then read FBCR bytes */
#define	FIR_OP_RSW	15	/* Wait for LFRB then byte into MDR */
#define	FCR		0xE8 /* Flash Command Register */
#define	FCR_CMD0	__PPCBITS(0,7)
#define	FCR_CMD1	__PPCBITS(8,15)
#define	FCR_CMD2	__PPCBITS(16,23)
#define	FCR_CMD3	__PPCBITS(24,31)
#define	FBAR		0xEC /* Flash Block Address Register */
#define	FBAR_BLK	__PPCBITS(8,31)
#define	FPAR		0xF0 /* Flash Page Address Register */
#define	FPAR_S_PI	__PPCBITS(17,21)	/* Page Index */
#define	FPAR_S_MS	__PPCBIT(22)		/* Main(0)/Spare(1) */
#define	FPAR_S_CI	__PPCBITS(23,31)	/* Column Index */
#define	FPAR_L_PI	__PPCBITS(14,19)	/* Page Index */
#define	FPAR_L_MS	__PPCBIT(20)		/* Main(0)/Spare(1) */
#define	FPAR_L_CI	__PPCBITS(21,31)	/* Column Index */
#define	FBCR		0xF4 /* Flash Byte Count Register */
#define	FBCR_BC		__PPCBITS(20,31)
#define	FECC0		0x100
#define	FECC_V		__PPCBIT(0)
#define	FECC_ECC	__PPCBIT(8,31)
#define	FECC1		0x104
#define	FECC2		0x108
#define	FECC3		0x10C

#define MXMR_RFEN	__PPCBIT(1)	/* Refresh enable */
#define MXMR_OP		__PPCBITS(2,3)	/* Command opcode */
#define	MXMR_OP_NORMAL	__SHIFTIN(0, MXMR_OP)	/* Normal Operation */
#define	MXMR_OP_WRITE	__SHIFTIN(1, MXMR_OP)	/* Write to UPM memory */
#define	MXMR_OP_READ	__SHIFTIN(2, MXMR_OP)	/* Read from UPM memory */
#define	MXMR_OP_RUN	__SHIFTIN(3, MXMR_OP)	/* Run Pattern */
#define MXMR_UWPL	__PPCBIT(3)	/* LUPWAIT is active low */
#define MXMR_AM		__PPCBITS(5,7)	/* Address multiplex size */
#define MXMR_DS		__PPCBITS(8,9)	/* Disable timer period */
#define	MXMR_DS_1CYCLE	__SHIFTIN(0,MXMR_DS)
#define	MXMR_DS_2CYCLE	__SHIFTIN(1,MXMR_DS)
#define	MXMR_DS_3CYCLE	__SHIFTIN(2,MXMR_DS)
#define	MXMR_DS_4CYCLE	__SHIFTIN(3,MXMR_DS)
#define MXMR_G0CL	__PPCBITS(10,12)	/* General line 0 control */
#define	MXMR_G0CL_A12	__SHIFTIN(0,MXMR_G0CL)
#define	MXMR_G0CL_A11	__SHIFTIN(1,MXMR_G0CL)
#define	MXMR_G0CL_A10	__SHIFTIN(2,MXMR_G0CL)
#define	MXMR_G0CL_A9	__SHIFTIN(3,MXMR_G0CL)
#define	MXMR_G0CL_A8	__SHIFTIN(4,MXMR_G0CL)
#define	MXMR_G0CL_A7	__SHIFTIN(5,MXMR_G0CL)
#define	MXMR_G0CL_A6	__SHIFTIN(6,MXMR_G0CL)
#define	MXMR_G0CL_A5	__SHIFTIN(7,MXMR_G0CL)
#define MXMR_GPL4	__PPCBIT(13)	/* LGPL4 output line disable */
#define MXMR_RLF	__PPCBITS(14,17)	/* Read loop field */
#define MXMR_WLF	__PPCBITS(18,21)	/* Write loop field */
#define MXMR_TLF	__PPCBITS(22,25)	/* Refresh loop field */
#define MXMR_MAS	__PPCBITS(26,31)	/* Machine Address */

#define	MRTPR_PTP	__PPCBITS(0,7)		/* Refresh timers prescaler */

#endif /* LBC_PRIVATE */