PowerPC 4xx Port Progress
Grant Erickson
grant at lcse.umn.edu
Sat Dec 11 05:00:24 EST 1999
I've been able to squish a few bugs over the last few days and have
consequently made a little* bit more progress with the Linux boot sequence
on the IBM 403GCX "Oak" evaluation board. It gets a little* further, dying
in the serial_init stuff. This is expected though since I haven't yet
gotten the serial code working (printk just dumps to log_buf which I
extract with the hardware debugger--painful but it works):
Linux version 2.3.31 (grant at brule) (gcc version 2.95.2 19991024 (release)) #23 Fri Dec 10 09:25:17 CST 1999.
On node 0 totalpages: 00000400.
zone(0): 1024 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Calibrating delay loop... 12.95 BogoMIPS.
Memory: 2648k available (752k kernel code, 656k data, 40k init) [c0000000,c0400000].
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes).
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.3
Based upon Swansea University Computer Society NET3.039
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
TCP: Hash tables configured (established 512 bind 1024)
Starting kswapd v1.6
Serial driver version 4.91 (1999-11-17) with no serial options enabled
Then it dies with a DTLB miss exception (for which there's no handler
yet).
Major issues to resolve/finish:
o Figure out why the stack on exception entry never looks the same as on
exception exit.
- Definitely a cache issue. Running with the caches disabled
in both real-mode (DR/IR = 00) and virtual mode (DR/IR = 11) fixes
things for the time being.
o Figure out why paging_init still causes things to die (I've worked
around it in the interim).
- Still not 100% sure what this code needs to do, but the following
seems to work on the 4MB Oak board:
unsigned int zones_size[MAX_NR_ZONES] = {0, 0, 0};
/*
* All pages are DMA-able so this is wrong - the zone code is
* assuming both regions have a value so this is necessary for
* now.
* -- Cort
*/
zones_size[ZONE_DMA] = virt_to_phys(end_of_DRAM) >> PAGE_SHIFT;
free_area_init(zones_size);
o 403GCX Async Interrupt Controller (AIC) (arch/ppc/kernel/ppc4xx_pic.c)
- Filled in a little more code here.
o Ethernet: National Semiconductor DP83902AV (drivers/net/oaknet.c)
o Serial: /dev/ttyS0 (On-chip 403GCX SCC), /dev/ttyS1 (NS 16550DV)
o MMU: finish up page table code and D/ITLB miss exception handlers.
o Timer code is probably wrong, BogoMIPS seems low.
- I think I've got this mostly* correct now.
As before, later today, I'll be posting patches, etc. to:
http://www.lcse.umn.edu/~grant/Linux/index.html
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-embedded
mailing list