# IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # $Source: src/occ/gpe/apss_altitude.pS $ # # OpenPOWER OnChipController Project # # Contributors Listed Below - COPYRIGHT 2011,2014 # [+] Google Inc. # [+] International Business Machines Corp. # # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or # implied. See the License for the specific language governing # permissions and limitations under the License. # # IBM_PROLOG_END_TAG ////////////////////////////////////////////////////////////////////// // Includes ////////////////////////////////////////////////////////////////////// .nolist #include "pgp.h" #include "pgas.h" .list ////////////////////////////////////////////////////////////////////// // Define Address Space ////////////////////////////////////////////////////////////////////// .oci ////////////////////////////////////////////////////////////////////// // Define Symbols ////////////////////////////////////////////////////////////////////// #include #define GPE_PROG_ID 0x0002 ////////////////////////////////////////////////////////////////////// // Define Structures ////////////////////////////////////////////////////////////////////// // Declare the offsets of the struct that will be passed to the // GPE program via the ETR register // // struct G_gpe_apss_read_altitude_args = // { .struct 0 ERROR_RC: .struct ERROR_RC + 8 ERROR_FFDC: .struct ERROR_FFDC + 8 ALTITUDE: // }; ////////////////////////////////////////////////////////////////////// // Begin Program ////////////////////////////////////////////////////////////////////// .text #include #include //-------------------------------------------------------------------- // PORE-GPE Routine Specification: // // Name: GPE_apss_read_altitude // // Description: Read APSS altitude // // Inputs: G_gpe_apss_read_altitude_args // struct { // PoreGpeErrorStruct error; // uint16_t altitude; // This is where the altitude will be stored (output) // uint8_t reserved[6]; // Requried since GPE only does 8 byte writes. // } G_gpe_apss_read_altitude_args // struct { // uint64_t rc; // This should be read as 63:32=addr, 31:0=rc // uint64_t ffdc; // Whatever GPE program puts in for FFDC data // } PoreGpeErrorStruct; // // Outputs: Altitude (and FFDC on failure) // // End PORE-GPE Routine Specification //-------------------------------------------------------------------- .global GPE_apss_read_altitude GPE_apss_read_altitude: // Copy passed Structure Pointer into A1 mr A1, ETR // Wait for SPI operations to be complete (10usec timeout) _wait_for_spi_ops_complete 10, error_timeout // Setup control regs // frame_size=16, out_count=16, in_delay1=never, in_count2=16 _putscom SPIPSS_P2S_CTRL_REG0, 0x410FC00004000000 // bridge_enable, clock_divider=7, 2 frames _putscom SPIPSS_P2S_CTRL_REG1, 0x801C400000000000 // inter_frame_delay=25 (2.5usec) _putscom SPIPSS_P2S_CTRL_REG2, 0x000C800000000000 // APSS command to get the altitude (APSS cmd 0x9000) li D0, 0x9000000000000000 _putscom_d0 SPIPSS_P2S_WDATA_REG // Start SPI transaction _putscom SPIPSS_P2S_COMMAND_REG, 0x8000000000000000 // wait 10usec for command to complete waits (10 * MICROSECONDS) // Wait for SPI operations to be complete (10usec timeout) _wait_for_spi_ops_complete 10, error_altitude_timeout // Read altitude and store in structure _getscom SPIPSS_P2S_RDATA_REG // The scom data for that cmd is in 2nd two bytes of the register (shift left 2 bytes) rols D0, D0, 16 std D0, ALTITUDE, A1 halt error_statusreg: // An error/reserved bit was set when reading p2s status register... // D0: P2S_STATUS_REG _saveffdc GPE_PROG_ID, 0x0002 halt error_timeout: // p2s_ongoing bit was never cleared after several retries... // D0: P2S_STATUS_REG _saveffdc GPE_PROG_ID, 0x0001 halt error_altitude_timeout: // After sending the read altitude command, the p2s_ongoing bit was // never cleared after several retries... // D0: P2S_STATUS_REG _saveffdc GPE_PROG_ID, 0x0003 halt ////////////////////////////////////////////////////////////////////// // End of Program //////////////////////////////////////////////////////////////////////