/* ************************************************************ ** Disable access to DIL/NetPC's flash by mapping it into ** the SC4x0's MMS Window C. ************************************************************ */ static void dnpc_unmap_flash(void) { /* - enable PC Card indexed register space */ setcsc(CSC_CR, getcsc(CSC_CR) | 0x2); /* disable memory window 1 */ setpcc(PCC_AWER_B, getpcc(PCC_AWER_B) & ~0x02); /* now disable PC Card indexed register space again */ setcsc(CSC_CR, getcsc(CSC_CR) & ~0x2); }
/* ************************************************************ ** Enable access to DIL/NetPC's flash by mapping it into ** the SC4x0's MMS Window C. ************************************************************ */ static void dnpc_map_flash(unsigned long flash_base, unsigned long flash_size) { unsigned long flash_end = flash_base + flash_size - 1; /* ** enable setup of MMS windows C-F: */ /* - enable PC Card indexed register space */ setcsc(CSC_CR, getcsc(CSC_CR) | 0x2); /* - set PC Card controller to operate in standard mode */ setcsc(CSC_PCCMDCR, getcsc(CSC_PCCMDCR) & ~1); /* ** Program base address and end address of window ** where the flash ROM should appear in CPU address space */ setpcc(PCC_MWSAR_1_Lo, (flash_base >> 12) & 0xff); setpcc(PCC_MWSAR_1_Hi, (flash_base >> 20) & 0x3f); setpcc(PCC_MWEAR_1_Lo, (flash_end >> 12) & 0xff); setpcc(PCC_MWEAR_1_Hi, (flash_end >> 20) & 0x3f); /* program offset of first flash location to appear in this window (0) */ setpcc(PCC_MWAOR_1_Lo, ((0 - flash_base) >> 12) & 0xff); setpcc(PCC_MWAOR_1_Hi, ((0 - flash_base)>> 20) & 0x3f); /* set attributes for MMS window C: non-cacheable, write-enabled */ setcsc(CSC_MMSWAR, getcsc(CSC_MMSWAR) & ~0x11); /* select physical device ROMCS0 (i.e. flash) for MMS Window C */ setcsc(CSC_MMSWDSR, getcsc(CSC_MMSWDSR) & ~0x03); /* enable memory window 1 */ setpcc(PCC_AWER_B, getpcc(PCC_AWER_B) | 0x02); /* now disable PC Card indexed register space again */ setcsc(CSC_CR, getcsc(CSC_CR) & ~0x2); }