From dc5f83904b1170ff44425d34e4ec5f93c4a22e18 Mon Sep 17 00:00:00 2001 From: Kevin Bracey <kbracey@gitlab.riscosopen.org> Date: Thu, 23 Sep 1999 16:47:45 +0000 Subject: [PATCH] Added support for ATMEL 4K and 8K EEPROM parts, including write protection of top quarter. Untested. Added support for ARM7500FE IO clock divide by 2. Version 4.89. Tagged as 'Kernel-4_89' --- VersionASM | 8 +++--- VersionNum | 14 +++++----- hdr/KernelWS | 1 + s/ARM600 | 8 ++++++ s/PMF/i2cutils | 74 ++++++++++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 92 insertions(+), 13 deletions(-) diff --git a/VersionASM b/VersionASM index 97dc3582..507e62f6 100644 --- a/VersionASM +++ b/VersionASM @@ -6,9 +6,9 @@ GBLS Module_MinorVersion GBLS Module_Date GBLS Module_FullVersion -Module_MajorVersion SETS "4.88" -Module_Version SETA 488 +Module_MajorVersion SETS "4.89" +Module_Version SETA 489 Module_MinorVersion SETS "" -Module_Date SETS "20 Sep 1999" -Module_FullVersion SETS "4.88" +Module_Date SETS "23 Sep 1999" +Module_FullVersion SETS "4.89" END diff --git a/VersionNum b/VersionNum index b4aa174a..19b2aa75 100644 --- a/VersionNum +++ b/VersionNum @@ -1,15 +1,15 @@ -/* (4.88) +/* (4.89) * * This file is automatically maintained by srccommit, do not edit manually. * */ -#define Module_MajorVersion_CMHG 4.88 +#define Module_MajorVersion_CMHG 4.89 #define Module_MinorVersion_CMHG -#define Module_Date_CMHG 20 Sep 1999 +#define Module_Date_CMHG 23 Sep 1999 -#define Module_MajorVersion "4.88" -#define Module_Version 488 +#define Module_MajorVersion "4.89" +#define Module_Version 489 #define Module_MinorVersion "" -#define Module_Date "20 Sep 1999" +#define Module_Date "23 Sep 1999" -#define Module_FullVersion "4.88" +#define Module_FullVersion "4.89" diff --git a/hdr/KernelWS b/hdr/KernelWS index c5ea4107..47615457 100644 --- a/hdr/KernelWS +++ b/hdr/KernelWS @@ -1083,6 +1083,7 @@ RTCFitted # 1 ; flag =1 iff RTC is fitted NVRamBase # 1 ; Base of NVRam NVRamSpeed # 1 ; Clock hold time in 0.5µs units NVRamPageSize # 1 ; Page size for writing (log2) +NVRamWriteSize # 1 ; Size of writable region (256byte units) ] diff --git a/s/ARM600 b/s/ARM600 index 01594e62..aad1e5f4 100644 --- a/s/ARM600 +++ b/s/ARM600 @@ -965,9 +965,17 @@ init7500FEcpu ; IOCLK divide by 1 ; [ FECPUSpeedNormal + [ FEIOSpeedHalf MOV r0, #IOMD_CLKCTL_CpuclkNormal + IOMD_CLKCTL_MemclkNormal + IOMD_CLKCTL_IOclkNormal + | + MOV r0, #IOMD_CLKCTL_CpuclkNormal + IOMD_CLKCTL_MemclkNormal + IOMD_CLKCTL_IOclkHalf + ] | + [ FEIOSpeedHalf MOV r0, #IOMD_CLKCTL_CpuclkHalf + IOMD_CLKCTL_MemclkNormal + IOMD_CLKCTL_IOclkNormal + | + MOV r0, #IOMD_CLKCTL_CpuclkHalf + IOMD_CLKCTL_MemclkNormal + IOMD_CLKCTL_IOclkHalf + ] ] ] STRB r0, [r12, #IOMD_CLKCTL] ; initialise all the prescalers. diff --git a/s/PMF/i2cutils b/s/PMF/i2cutils index 77038d5d..2820f8a0 100644 --- a/s/PMF/i2cutils +++ b/s/PMF/i2cutils @@ -35,6 +35,7 @@ ; 17-Sep-98 KJB Add support for 16K 24C128 EEPROM. ; 21-Sep-98 KJB Add OS_NVMemory SWI. ; 30-Jul-99 KJB Add support for 8K 24C64 EEPROM. +; 23-Sep-99 KJB Remove support for 24C64, add support for 4K and 8K protectable ATMEL parts. PhysChecksum * (((CheckSumCMOS + &30) :MOD: &F0) + &10) @@ -47,7 +48,8 @@ RTCAddress * &a0 ; traditional RTC / 240 byte CMOS E2ROMAddress * &a8 ; 24C08 device - 512 byte or 1K E2ROMAddress2K * &e0 ; 24C174 device - 2K E2ROMAddress2K_OTP * &60 ; 24C174 device - OTP section -E2ROMAddress8K * &a2 ; 24C64 device - 8K +E2ROMAddress4K * &a4 ; 24C32 device - 4K (top 1K protectable) +E2ROMAddress8K * &a2 ; 24C64 device - 8K (top 2K protectable) E2ROMAddress16K * &a8 ; 24C128 device - 16K ] @@ -459,6 +461,11 @@ Write Pull "R0-R4, PC", CC ; don't write to OTP section ] + MOV R14, #0 ; don't write to protected section + LDRB R14, [R14, #NVRamWriteSize] + CMP R0, R14 ; (note assumption that NVRamWriteSize is + Pull "R0-R4, PC", HS ; outside mangled region). + MOV R2, R0 MOV R3, R1 [ ChecksumCMOS @@ -533,13 +540,16 @@ WriteBlock ROUT [ E2ROMSupport [ :LNOT: :DEF: TestHarness MOV R14, #0 + LDRB R4, [R14, #NVRamWriteSize] LDRB R14, [R14, #NVRamSize] | LDRB R14, NVSize + MOV R4, R14 ] MOV R14, R14, LSL #8 | MOV R14, #240 + MOV R4, R14 ] CMP R0, R14 @@ -550,6 +560,12 @@ WriteBlock ROUT CMP R3, R14 BHI %FT90 + CMP R0, R4 ; ignore writes totally outside writable area + BHS %FT80 + + SUBS R14, R3, R4 + SUBGT R2, R2, R14 ; truncate writes partially outside writable area + TEQ R2, #0 BEQ %FT80 @@ -1304,6 +1320,38 @@ MakeChecksum ROUT LTORG +; ***************************************************************************** +; +; OS_SetTime - Set the real-time clock +; +; in: R0 = pointer to 5 byte UTC time +; +; out: R0 preserved +; + +SetTimeSWI ROUT + Push "R0-R8" + SUB SP, SP, #36 + MOV R1, R0 + MOV R2, SP + SWI XTerritory_ConvertTimeToUTCOrdinals + ADDVS SP, SP, #36+4 + Pull "R1-R8", VS + ExitSWIHandler VS + LDR R8, [SP], #4 ; centiseconds + LDR R7, [SP], #4 ; seconds + LDR R1, [SP], #4 ; minutes + Pull "R0,R2,R3,R5" ; hours, day, month, year + ADD SP, SP, #8 ; junk day of week and year + MOV R4, #100 + DivRem R6, R5, R4, R14 ; R5 = year (lo), R6 = year (hi) + + BL SetTime + + STRVS R0,[SP] + Pull "R0-R8" + ExitSWIHandler + ; ***************************************************************************** ; ; SetTime - Write the CMOS clock time and update 5-byte RealTime @@ -1492,7 +1540,7 @@ ReadTime ROUT [ CacheCMOSRAM -InitCMOSCache ENTRY "r0-r5" +InitCMOSCache ENTRY "r0-r6" [ E2ROMSupport ; Need to set the slowest speed so we can probe @@ -1521,6 +1569,7 @@ InitCMOSCache ENTRY "r0-r5" STRB R4, RTCFlag ] MOV R5, #4 ; assume 16 byte page size to start with + MOV R6, #0 ; assume not protected ; Have we got a 2K E² ? MOV r1, #E2ROMAddress2K @@ -1559,12 +1608,30 @@ InitCMOSCache ENTRY "r0-r5" ] BVC %FT5 +; Have we got a 4K device? + + MOV r1, #E2ROMAddress4K + MOV r0, #E2ROMAddress4K + BL DummyAccess + MOVVC R4, #16 + [ IOMD_C_EEPROMProtect <> 0 + MOVVC R6, #12 ; Only bottom 3K writable + ] + MOVVC R5, #5 ; 32 byte page size + [ ClockNVMemoryFast + MOVVC R3, #3 ; Fast speed setting (1.5µs delays) + ] + BVC %FT5 + ; Have we got an 8K device? MOV r1, #E2ROMAddress8K MOV r0, #E2ROMAddress8K BL DummyAccess MOVVC R4, #32 + [ IOMD_C_EEPROMProtect <> 0 + MOVVC R6, #24 ; Only bottom 6K writable + ] MOVVC R5, #5 ; 32 byte page size [ ClockNVMemoryFast MOVVC R3, #3 ; Fast speed setting (1.5µs delays) @@ -1579,6 +1646,9 @@ InitCMOSCache ENTRY "r0-r5" STRB R1, [R2, #NVRamBase] STRB R4, [R2, #NVRamSize] STRB R5, [R2, #NVRamPageSize] + TEQ R6, #0 + MOVEQ R6, R4 + STRB R6, [R2, #NVRamWriteSize] [ ClockNVMemoryFast STRB R3, [R2, #NVRamSpeed] ] -- GitLab