Johnny Billquist wrote:
A few questions below, as I have a hard time following what you actually
have done...
On 2013-01-12 23:53, Holm Tiffe wrote:
[..]
I'm no on that point, weher I should be able to talk with the UART.
The machine boots int my (incomplete) scncnprobe().
void
scncnprobe(struct consdev *cn)
{
//static vaddr_t dz_regs;
extern vaddr_t iospace;
vaddr_t * du_base;
int diagcons;
paddr_t ioaddr = 0x20100000;
extern const struct cdevsw scn_cdevsw;
switch(vax_boardtype) {
case VAX_BTYP_RT300:
diagcons = 0;
break;
default:
cn->cn_pri = CN_DEAD;
return;
}
if (diagcons)
cn->cn_pri = CN_REMOTE;
else
cn->cn_pri = CN_NORMAL;
cn->cn_dev = makedev(cdevsw_lookup_major(&scn_cdevsw), diagcons);
du_base = (void *)iospace;
ioaccess(iospace, ioaddr, 1);
du_base[0xc]=0xa;
DELAY(10000);
du_base[0xc]=(u_char)0x42;
DELAY(10000);
__asm("halt");
}
...and finally halts at bottom.
I've used that dz_vsbus.c as example and this is the very first call
to my driver.
The UART in this moment should be still poper initialized from the ROM
code, so writing to this Transmit buffer at 0x2010000c should print out
the char 'B'.
I assume what you see is that it comes to the halt, but nothing is
printed on the console, right?
Check your assignment to iospace in your code... :-)
(I hope you do understand what you are doing...)
[..]
Yes, be more careful and observant when you write your code. :-)
Johnny
No, I don't really know anymore what I'm doing there.
void
dzcnprobe(struct consdev *cndev)
{
extern vaddr_t iospace;
int diagcons;
paddr_t ioaddr = 0x200A0000;
extern const struct cdevsw dz_cdevsw;
switch (vax_boardtype) {
case VAX_BTYP_410:
case VAX_BTYP_420:
case VAX_BTYP_43:
diagcons = (vax_confdata & 0x20 ? 3 : 0);
break;
case VAX_BTYP_46:
case VAX_BTYP_48:
diagcons = (vax_confdata & 0x100 ? 3 : 0);
break;
case VAX_BTYP_49:
ioaddr = 0x25000000;
diagcons = (vax_confdata & 8 ? 3 : 0);
break;
case VAX_BTYP_53:
ioaddr = 0x25000000;
diagcons = 3;
break;
default:
cndev->cn_pri = CN_DEAD;
return;
}
if (diagcons)
cndev->cn_pri = CN_REMOTE;
else
cndev->cn_pri = CN_NORMAL;
cndev->cn_dev = makedev(cdevsw_lookup_major(&dz_cdevsw), diagcons);
dz_regs = iospace;
dz = (void *)dz_regs;
ioaccess(iospace, ioaddr, 1);
dz->csr = 0; /* Disable scanning until initting is done */
dz->tcr = (1 << minor(cndev->cn_dev)); /* Turn on xmitter */
dz->csr = 0x20; /* Turn scanning back on */
}
..and what would be different to that code.
Good to know that you know whats wrong. :-|