This is my BSPPowerOff function (in platform/at91sam9263ek/src/oal/oallip/power.c) - I think this the change I made to make it work (it was a while ago)...
Code:
VOID BSPPowerOff(DWORD *pdwSavePCConfig, DWORD *pdwSaveSCConfig)
{
AT91PS_PMC pPMC = OALPAtoVA((DWORD)AT91C_BASE_PMC,FALSE);
AT91PS_SDRAMC pSDRAM = OALPAtoVA((DWORD)AT91C_BASE_SDRAMC0,FALSE);
RETAILMSG(1,(TEXT("BSPPowerOff\r\n")));
// Save the settings in order to restore them after a resume
*pdwSavePCConfig = pPMC->PMC_PCSR;
*pdwSaveSCConfig = pPMC->PMC_SCSR;
pSDRAM->SDRAMC_LPR = AT91C_SDRAMC_LPCB_SELF_REFRESH;
//stop unecessary clock
// The PIOC should be awake for resume, PIOA maybe for the Touschscreen IRQ
// For the others three, poweroff should be implemented in the driver code, in order to correctly manage the poweroff
//pPMC->PMC_PCDR = ~((1 << AT91C_ID_PIOCDE) | (1 << AT91C_ID_PIOA) | (1 << AT91C_ID_AC97C) | (1 << AT91C_ID_2DGE) | (1 << AT91C_ID_EMAC) | (1 << AT91C_ID_US0) | (1 << AT91C_ID_DMA )); //0xFF5BFFEB
pPMC->PMC_PCDR = ~((1 << AT91C_ID_PIOA) | (1 << AT91C_ID_2DGE)); //0xFF5BFFEB
//pPMC->PMC_SCDR = ~(AT91C_PMC_PCK);
pPMC->PMC_SCDR = 0xFFFFFFFF;
}
The last bit (stop unecessary clock...) will probably be different for your system or the eval board, so I'd just leave it as the default. The two pSDRAM lines are the ones that matter.