Exemplo n.º 1
0
static inline void
fl_wr32_cmd(struct bankdesc *b, uint32_t a, uint32_t off, uint32_t cmd)
{
	if ( 1 == b->width ) {
		if ( off == UNLK2_ADDR_16 )
			off = UNLK2_ADDR_8;
		else
			/* all others are simply left shifted */
			off <<= 1;
	}
	cmd = fl_splat32(b, cmd);
	a   = ADDR32(b, a, off);
	fl_wr32(b, a, cmd);
}
Exemplo n.º 2
0
STATIC int
flash_get_id_s160(struct bankdesc *b, uint32_t addr, uint32_t *pVendorId, uint32_t *pDeviceId)
{
uint32_t dev_id[3], x, i;

	if ( 4 != FLASH_STRIDE(b) )
		fprintf(stderr,"Warning: strides other than 4 untested\n(%s at %d)\n",
			__FILE__,__LINE__);

	if ( 2 != b->width )
		fprintf(stderr,"Warning: device width other than 2 untested\n(%s at %d)\n",
			__FILE__,__LINE__);

	addr &= ~ (ADDR32(b, 0, 0x1000) - 1);
	unlk(b, addr);
	fl_wr32_cmd(b, addr, UNLK1_ADDR_16, ASEL_DATA);
	*pVendorId = fl_rd32(b, addr, VEND_ID_ADDR_16) & 0xff;
	dev_id [0] = fl_rd32(b, addr, DEV1_ID_ADDR_16);
	dev_id [1] = fl_rd32(b, addr, DEV2_ID_ADDR_16);
	dev_id [2] = fl_rd32(b, addr, DEV3_ID_ADDR_16);

#ifdef DEBUG
	printf("Vendor Id 0x%08"PRIx32", Dev Ids: 0x%08"PRIx32", 0x%08"PRIx32", 0x%08"PRIx32"\n",
		*pVendorId, dev_id[0], dev_id[1], dev_id[2]);
#endif

	flash_array_mode_s160(b, addr);

	for ( x=0, i=0; i<3; i++ ) {
		x = (x<<8) | (dev_id[i] & 0xff);
	}

	*pDeviceId = x;

	return 0;
}
Exemplo n.º 3
0
static inline uint32_t
fl_rd32(struct bankdesc *b, uint32_t a, uint32_t off)
{
volatile union bconv *p;
uint32_t              rval;

	if ( 1 == b->width )
		off <<= 1;;

	a = ADDR32(b, a, off);

	p    = (volatile union bconv *)a;
	if ( 4 == FLASH_STRIDE(b) ) {
		rval = p->u;
		IOSYNC(p->u);
	} else if ( 2 == FLASH_STRIDE(b) ) {
		rval = p->s[0];
		IOSYNC(p->s[0]);
	} else {
		rval = p->c[0];
		IOSYNC(p->c[0]);
	}
	return rval;
}
Exemplo n.º 4
0
Arquivo: main.c Projeto: lqu/W5300E01
void InitXHyper255A(void)
{
   ADDR32(GPIO_BASE+GPDR2) |= GPDR2_VALUE; //~0x0;//((ADDR32(GPIO_BASE+GPDR2) & 0x0001FFFF) | GPDR2_VALUE);
   ADDR32(GPIO_BASE+GAFR2_L) |= GAFR2L_VALUE;
   ADDR32(MEM_CTL_BASE+MSC1) = 0x00008259;//0x000095F8;
}
Exemplo n.º 5
0
/* Send unlock sequence */
static inline void unlk(struct bankdesc *b, uint32_t a)
{
	a &= ~ ( ADDR32(b, 0,0x1000) - 1 );
	fl_wr32_cmd(b, a, UNLK1_ADDR_16, UNLK1_DATA);
	fl_wr32_cmd(b, a, UNLK2_ADDR_16, UNLK2_DATA);
}