11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*!**************************************************************************
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*!
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*! MACROS:
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*!   IO_MASK(reg,field)
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*!   IO_STATE(reg,field,state)
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*!   IO_EXTRACT(reg,field,val)
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*!   IO_STATE_VALUE(reg,field,state)
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*!   IO_BITNR(reg,field)
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*!   IO_WIDTH(reg,field)
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*!   IO_FIELD(reg,field,val)
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*!   IO_RD(reg)
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*!   All moderegister addresses and fields of these.
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*!
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*!**************************************************************************/
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __sv_addr_ag_h__
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __sv_addr_ag_h__
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __test_sv_addr__ 0
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*------------------------------------------------------------
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds!* General macros to manipulate moderegisters.
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds!*-----------------------------------------------------------*/
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IO_MASK returns a mask for a specified bitfield in a register.
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   Note that this macro doesn't work when field width is 32 bits. */
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_MASK(reg, field) IO_MASK_ (reg##_, field##_)
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_MASK_(reg_, field_) \
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    ( ( ( 1 << reg_##_##field_##_WIDTH ) - 1 ) << reg_##_##field_##_BITNR )
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IO_STATE returns a constant corresponding to a one of the symbolic
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   states that the bitfield can have. (Shifted to correct position)  */
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_STATE(reg, field, state) IO_STATE_ (reg##_, field##_, _##state)
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_STATE_(reg_, field_, _state) \
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    ( reg_##_##field_##_state << reg_##_##field_##_BITNR )
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IO_EXTRACT returns the masked and shifted value corresponding to the
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   bitfield can have. */
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_EXTRACT(reg, field, val) IO_EXTRACT_ (reg##_, field##_, val)
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_EXTRACT_(reg_, field_, val) ( (( ( ( 1 << reg_##_##field_##_WIDTH ) \
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds     - 1 ) << reg_##_##field_##_BITNR ) & (val)) >> reg_##_##field_##_BITNR )
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IO_STATE_VALUE returns a constant corresponding to a one of the symbolic
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   states that the bitfield can have. (Not shifted)  */
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_STATE_VALUE(reg, field, state) \
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    IO_STATE_VALUE_ (reg##_, field##_, _##state)
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_STATE_VALUE_(reg_, field_, _state) ( reg_##_##field_##_state )
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IO_FIELD shifts the val parameter to be aligned with the bitfield
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   specified. */
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_FIELD(reg, field, val) IO_FIELD_ (reg##_, field##_, val)
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_FIELD_(reg_, field_, val) ((val) << reg_##_##field_##_BITNR)
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IO_BITNR returns the starting bitnumber of a bitfield. Bit 0 is
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   LSB and the returned bitnumber is LSB of the field. */
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_BITNR(reg, field) IO_BITNR_ (reg##_, field##_)
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_BITNR_(reg_, field_) (reg_##_##field_##_BITNR)
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IO_WIDTH returns the width, in bits, of a bitfield. */
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_WIDTH(reg, field) IO_WIDTH_ (reg##_, field##_)
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_WIDTH_(reg_, field_) (reg_##_##field_##_WIDTH)
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--- Obsolete. Kept for backw compatibility. ---*/
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Reads (or writes) a byte/uword/udword from the specified mode
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   register. */
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_RD(reg) (*(volatile u32*)(reg))
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_RD_B(reg) (*(volatile u8*)(reg))
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_RD_W(reg) (*(volatile u16*)(reg))
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_RD_D(reg) (*(volatile u32*)(reg))
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*------------------------------------------------------------
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds!* Start addresses of the different memory areas.
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds!*-----------------------------------------------------------*/
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_CSE0_START (0x00000000)
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_CSE0_SIZE (0x04000000)
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_CSE1_START (0x04000000)
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_CSE1_SIZE (0x04000000)
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_CSR0_START (0x08000000)
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_CSR1_START (0x0c000000)
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_CSP0_START (0x10000000)
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_CSP1_START (0x14000000)
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_CSP2_START (0x18000000)
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_CSP3_START (0x1c000000)
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_CSP4_START (0x20000000)
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_CSP5_START (0x24000000)
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_CSP6_START (0x28000000)
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_CSP7_START (0x2c000000)
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_DRAM_START (0x40000000)
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_NON_CACHEABLE (0x80000000)
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*------------------------------------------------------------
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds!* Type casts used in mode register macros, making pointer
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds!* dereferencing possible. Empty in assembler.
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds!*-----------------------------------------------------------*/
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __ASSEMBLER__
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define  IO_TYPECAST_UDWORD  (volatile u32*)
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define  IO_TYPECAST_RO_UDWORD  (const volatile u32*)
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define  IO_TYPECAST_UWORD  (volatile u16*)
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define  IO_TYPECAST_RO_UWORD  (const volatile u16*)
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define  IO_TYPECAST_BYTE  (volatile u8*)
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define  IO_TYPECAST_RO_BYTE  (const volatile u8*)
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define  IO_TYPECAST_UDWORD
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define  IO_TYPECAST_RO_UDWORD
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define  IO_TYPECAST_UWORD
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define  IO_TYPECAST_RO_UWORD
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define  IO_TYPECAST_BYTE
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define  IO_TYPECAST_RO_BYTE
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*------------------------------------------------------------*/
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
117a1ce39288e6fbefdd8d607021d02384eb4a20b99David Howells#include <arch/sv_addr.agh>
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if __test_sv_addr__
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IO_MASK( R_BUS_CONFIG , CE ) */
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsIO_MASK( R_WAITSTATES , SRAM_WS )
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsIO_MASK( R_TEST , W32 )
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsIO_STATE( R_BUS_CONFIG, CE, DISABLE )
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsIO_STATE( R_BUS_CONFIG, CE, ENABLE )
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsIO_STATE( R_DRAM_TIMING, REF, IVAL2 )
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsIO_MASK( R_DRAM_TIMING, REF )
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsIO_MASK( R_EXT_DMA_0_STAT, TFR_COUNT ) >> IO_BITNR( R_EXT_DMA_0_STAT, TFR_COUNT )
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsIO_RD(R_EXT_DMA_0_STAT) & IO_MASK( R_EXT_DMA_0_STAT, S )
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   == IO_STATE( R_EXT_DMA_0_STAT, S, STARTED )
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif  /* ifndef __sv_addr_ag_h__ */
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
140