50 likes | 62 Views
Discover key differences in VME interface when migrating to PPC at JLab, including VME interrupt variations and other system-level challenges. Learn about register set changes affecting DMA code, VME interrupt nuances, and additional hurdles that need to be addressed during the migration process.
E N D
Migration to PPC at JLab Richard Dickson
VME data interface differences: mvme177 System Local Bus 68060 CPU VMEchip2 VME mvme2700 System Local Bus PPC 750 CPU PCI Bus Raven Universe VME • The completely different bridge chips’ register set resulted in low level VME Direct Memory Access (DMA) code having to be rewritten. • Any hard coded system local bus mapped VME addresses fail on this migration since PPC VxWorks maps VME blocks to different space.
VME interrupt differences: • Only even VME interrupt vectors allowed. • VME interrupt does not preempt ongoing DMA. ISR ISR DMA transfer Time IRQ IRQ • “Bad VME interrupt 0” messages on console. • move stop_irq_value, EOI_reg ; write does not complete before • rfi ; return from interrupt • In this case the code execution can erroneously exit interrupt context prior to the IRQ being de-asserted. This was fixed partially by executing an “Enforce In-order Execution of IO (eieio)” instruction prior to the rfi.
Other Problems: • VxWorks for the mv2700 configures the PowerPC floating point unit to issue an exception on divide by zero faults (causing task suspension). This was not the case for the 162, 167, 177. The VxWorks taskSpawn command was overloaded to issue a call to this assembly language code to disable FP exceptions on behalf of the task being spawned. • In pursuit of increased performance, the PowerPC CPU will combine two consecutive sequential 16 bit writes into a single 32 bit write (referred to as Store Gathering). address 16 Bit address 32 Bit address + 2 16 Bit
Other Problems (cont.): • Non-volatile RAM used for maintaining IOC reboot/save/restore dates is not directly accessible (memory mapped) as is the case for a 162, 167, 177 board. Custom driver code was written to emulate this functionality on the 2700. • A custom, low level code package (known as timevt) existed to provide asynchronous short period timer functionality. This utilized 162/167/177 specific hardware timer architecture that is unavailable on the 2700 platform. • The CAMAC interface driver did not work. • Serial applications need to be tested. • cmlog had problems building.