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