[Skiboot] [PATCH v2 2/3] occ: Move occ declarations into occ.h
Shilpasri G Bhat
shilpa.bhat at linux.vnet.ibm.com
Wed Jun 20 15:34:01 AEST 2018
On 06/20/2018 09:19 AM, Andrew Donnellan wrote:
> OCC declarations are currently split between skiboot.h and occ-sensor.h.
> Given the growing unwieldyness of skiboot.h it's probably time to move it
> all into one header.
>
> Rename occ-sensor.h to occ.h, move all OCC-related declarations out of
> skiboot.h, and add #includes as necessary.
>
> Signed-off-by: Andrew Donnellan <andrew.donnellan at au1.ibm.com>
> ---
Reviewed-by: Shilpasri G Bhat <shilpa.bhat at linux.vnet.ibm.com>
> core/hostservices.c | 1 +-
> core/init.c | 1 +-
> core/opal.c | 1 +-
> core/sensor.c | 1 +-
> hw/ipmi/ipmi-sel.c | 1 +-
> hw/occ-sensor.c | 2 +-
> hw/occ.c | 2 +-
> hw/psi.c | 1 +-
> include/occ-sensor.h | 264 +----------------------------------
> include/occ.h | 296 ++++++++++++++++++++++++++++++++++++++-
> include/skiboot.h | 27 +---
> platforms/ibm-fsp/common.c | 1 +-
> 12 files changed, 305 insertions(+), 293 deletions(-)
> delete mode 100644 include/occ-sensor.h
> create mode 100644 include/occ.h
>
> diff --git a/core/hostservices.c b/core/hostservices.c
> index c37bf2f0bbf0..d3a9b3cefe10 100644
> --- a/core/hostservices.c
> +++ b/core/hostservices.c
> @@ -29,6 +29,7 @@
> #include <console.h>
> #include <mem-map.h>
> #include <timebase.h>
> +#include <occ.h>
>
> #define HOSTBOOT_RUNTIME_INTERFACE_VERSION 1
>
> diff --git a/core/init.c b/core/init.c
> index 272a57a145ee..b660af2d7824 100644
> --- a/core/init.c
> +++ b/core/init.c
> @@ -53,6 +53,7 @@
> #include <dts.h>
> #include <sbe-p9.h>
> #include <debug_descriptor.h>
> +#include <occ.h>
>
> enum proc_gen proc_gen;
> unsigned int pcie_max_link_speed;
> diff --git a/core/opal.c b/core/opal.c
> index e3a3bbdeea98..7ffca9c17bb3 100644
> --- a/core/opal.c
> +++ b/core/opal.c
> @@ -31,6 +31,7 @@
> #include <timer.h>
> #include <elf-abi.h>
> #include <errorlog.h>
> +#include <occ.h>
>
> /* Pending events to signal via opal_poll_events */
> uint64_t opal_pending_events;
> diff --git a/core/sensor.c b/core/sensor.c
> index c3fa3193757f..bd329a183ee1 100644
> --- a/core/sensor.c
> +++ b/core/sensor.c
> @@ -21,6 +21,7 @@
> #include <opal.h>
> #include <dts.h>
> #include <lock.h>
> +#include <occ.h>
>
> struct dt_node *sensor_node;
>
> diff --git a/hw/ipmi/ipmi-sel.c b/hw/ipmi/ipmi-sel.c
> index 54cc597d9dee..eb63147bdc52 100644
> --- a/hw/ipmi/ipmi-sel.c
> +++ b/hw/ipmi/ipmi-sel.c
> @@ -26,6 +26,7 @@
> #include <pel.h>
> #include <opal-msg.h>
> #include <debug_descriptor.h>
> +#include <occ.h>
>
> /* OEM SEL fields */
> #define SEL_OEM_ID_0 0x55
> diff --git a/hw/occ-sensor.c b/hw/occ-sensor.c
> index 783f75740c42..c062f64a6fd3 100644
> --- a/hw/occ-sensor.c
> +++ b/hw/occ-sensor.c
> @@ -20,7 +20,7 @@
> #include <sensor.h>
> #include <device.h>
> #include <cpu.h>
> -#include <occ-sensor.h>
> +#include <occ.h>
>
> enum sensor_attr {
> SENSOR_SAMPLE,
> diff --git a/hw/occ.c b/hw/occ.c
> index 29eb4bd67ca2..fc95d3926bb0 100644
> --- a/hw/occ.c
> +++ b/hw/occ.c
> @@ -31,7 +31,7 @@
> #include <powercap.h>
> #include <psr.h>
> #include <sensor.h>
> -#include <occ-sensor.h>
> +#include <occ.h>
>
> /* OCC Communication Area for PStates */
>
> diff --git a/hw/psi.c b/hw/psi.c
> index f5168ba96765..cbdbeaa9aeff 100644
> --- a/hw/psi.c
> +++ b/hw/psi.c
> @@ -35,6 +35,7 @@
> #include <xive.h>
> #include <sbe-p9.h>
> #include <phys-map.h>
> +#include <occ.h>
>
> static LIST_HEAD(psis);
> static u64 psi_link_timer;
> diff --git a/include/occ-sensor.h b/include/occ-sensor.h
> deleted file mode 100644
> index 67ffae86e699..000000000000
> --- a/include/occ-sensor.h
> +++ /dev/null
> @@ -1,264 +0,0 @@
> -/* Copyright 2017 IBM 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.
> - */
> -
> -/*
> - * OCC Sensor Data
> - *
> - * OCC sensor data will use BAR2 (OCC Common is per physical drawer).
> - * Starting address is at offset 0x00580000 from BAR2 base address.
> - * Maximum size is 1.5MB.
> - *
> - * -------------------------------------------------------------------------
> - * | Start (Offset from | End | Size |Description |
> - * | BAR2 base address) | | | |
> - * -------------------------------------------------------------------------
> - * | 0x00580000 | 0x005A57FF |150kB |OCC 0 Sensor Data Block|
> - * | 0x005A5800 | 0x005CAFFF |150kB |OCC 1 Sensor Data Block|
> - * | : | : | : | : |
> - * | 0x00686800 | 0x006ABFFF |150kB |OCC 7 Sensor Data Block|
> - * | 0x006AC000 | 0x006FFFFF |336kB |Reserved |
> - * -------------------------------------------------------------------------
> - *
> - *
> - * OCC N Sensor Data Block Layout (150kB)
> - *
> - * The sensor data block layout is the same for each OCC N. It contains
> - * sensor-header-block, sensor-names buffer, sensor-readings-ping buffer and
> - * sensor-readings-pong buffer.
> - *
> - * ----------------------------------------------------------------------------
> - * | Start (Offset from OCC | End | Size |Description |
> - * | N Sensor Data Block) | | | |
> - * ----------------------------------------------------------------------------
> - * | 0x00000000 | 0x000003FF |1kB |Sensor Data Header Block |
> - * | 0x00000400 | 0x0000CBFF |50kB |Sensor Names |
> - * | 0x0000CC00 | 0x0000DBFF |4kB |Reserved |
> - * | 0x0000DC00 | 0x00017BFF |40kB |Sensor Readings ping buffer|
> - * | 0x00017C00 | 0x00018BFF |4kB |Reserved |
> - * | 0x00018C00 | 0x00022BFF |40kB |Sensor Readings pong buffer|
> - * | 0x00022C00 | 0x000257FF |11kB |Reserved |
> - * ----------------------------------------------------------------------------
> - *
> - * Sensor Data Header Block : This is written once by the OCC during
> - * initialization after a load or reset. Layout is defined in 'struct
> - * occ_sensor_data_header'
> - *
> - * Sensor Names : This is written once by the OCC during initialization after a
> - * load or reset. It contains static information for each sensor. The number of
> - * sensors, format version and length of each sensor is defined in
> - * 'Sensor Data Header Block'. Format of each sensor name is defined in
> - * 'struct occ_sensor_name'. The first sensor starts at offset 0 followed
> - * immediately by the next sensor.
> - *
> - * Sensor Readings Ping/Pong Buffer:
> - * There are two 40kB buffers to store the sensor readings. One buffer that
> - * is currently being updated by the OCC and one that is available to be read.
> - * Each of these buffers will be of the same format. The number of sensors and
> - * the format version of the ping and pong buffers is defined in the
> - * 'Sensor Data Header Block'.
> - *
> - * Each sensor within the ping and pong buffers may be of a different format
> - * and length. For each sensor the length and format is determined by its
> - * 'struct occ_sensor_name.structure_type' in the Sensor Names buffer.
> - *
> - * --------------------------------------------------------------------------
> - * | Offset | Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 |
> - * --------------------------------------------------------------------------
> - * | 0x0000 |Valid | Reserved |
> - * | |(0x01) | |
> - * --------------------------------------------------------------------------
> - * | 0x0008 | Sensor Readings |
> - * --------------------------------------------------------------------------
> - * | : | : |
> - * --------------------------------------------------------------------------
> - * | 0xA000 | End of Data |
> - * --------------------------------------------------------------------------
> - *
> - */
> -
> -#define MAX_OCCS 8
> -#define MAX_CHARS_SENSOR_NAME 16
> -#define MAX_CHARS_SENSOR_UNIT 4
> -
> -#define OCC_SENSOR_DATA_BLOCK_OFFSET 0x00580000
> -#define OCC_SENSOR_DATA_BLOCK_SIZE 0x00025800
> -
> -/*
> - * These should match the definitions inside the OCC source:
> - * occ/src/occ_405/sensor/sensor_info.c
> - */
> -
> -enum occ_sensor_type {
> - OCC_SENSOR_TYPE_GENERIC = 0x0001,
> - OCC_SENSOR_TYPE_CURRENT = 0x0002,
> - OCC_SENSOR_TYPE_VOLTAGE = 0x0004,
> - OCC_SENSOR_TYPE_TEMPERATURE = 0x0008,
> - OCC_SENSOR_TYPE_UTILIZATION = 0x0010,
> - OCC_SENSOR_TYPE_TIME = 0x0020,
> - OCC_SENSOR_TYPE_FREQUENCY = 0x0040,
> - OCC_SENSOR_TYPE_POWER = 0x0080,
> - OCC_SENSOR_TYPE_PERFORMANCE = 0x0200,
> -};
> -
> -#define OCC_ENABLED_SENSOR_MASK (OCC_SENSOR_TYPE_GENERIC | \
> - OCC_SENSOR_TYPE_CURRENT | \
> - OCC_SENSOR_TYPE_VOLTAGE | \
> - OCC_SENSOR_TYPE_TIME | \
> - OCC_SENSOR_TYPE_TEMPERATURE | \
> - OCC_SENSOR_TYPE_POWER | \
> - OCC_SENSOR_TYPE_UTILIZATION | \
> - OCC_SENSOR_TYPE_FREQUENCY | \
> - OCC_SENSOR_TYPE_PERFORMANCE);
> -
> -enum occ_sensor_location {
> - OCC_SENSOR_LOC_SYSTEM = 0x0001,
> - OCC_SENSOR_LOC_PROCESSOR = 0x0002,
> - OCC_SENSOR_LOC_PARTITION = 0x0004,
> - OCC_SENSOR_LOC_MEMORY = 0x0008,
> - OCC_SENSOR_LOC_VRM = 0x0010,
> - OCC_SENSOR_LOC_OCC = 0x0020,
> - OCC_SENSOR_LOC_CORE = 0x0040,
> - OCC_SENSOR_LOC_GPU = 0x0080,
> - OCC_SENSOR_LOC_QUAD = 0x0100,
> -};
> -
> -enum sensor_struct_type {
> - OCC_SENSOR_READING_FULL = 0x01,
> - OCC_SENSOR_READING_COUNTER = 0x02,
> -};
> -
> -/**
> - * struct occ_sensor_data_header - Sensor Data Header Block
> - * @valid: When the value is 0x01 it indicates
> - * that this header block and the sensor
> - * names buffer are ready
> - * @version: Format version of this block
> - * @nr_sensors: Number of sensors in names, ping and
> - * pong buffer
> - * @reading_version: Format version of the Ping/Pong buffer
> - * @names_offset: Offset to the location of names buffer
> - * @names_version: Format version of names buffer
> - * @names_length: Length of each sensor in names buffer
> - * @reading_ping_offset: Offset to the location of Ping buffer
> - * @reading_pong_offset: Offset to the location of Pong buffer
> - * @pad/reserved: Unused data
> - */
> -struct occ_sensor_data_header {
> - u8 valid;
> - u8 version;
> - u16 nr_sensors;
> - u8 reading_version;
> - u8 pad[3];
> - u32 names_offset;
> - u8 names_version;
> - u8 name_length;
> - u16 reserved;
> - u32 reading_ping_offset;
> - u32 reading_pong_offset;
> -} __attribute__((__packed__));
> -
> -/**
> - * struct occ_sensor_name - Format of Sensor Name
> - * @name: Sensor name
> - * @units: Sensor units of measurement
> - * @gsid: Global sensor id (OCC)
> - * @freq: Update frequency
> - * @scale_factor: Scaling factor
> - * @type: Sensor type as defined in
> - * 'enum occ_sensor_type'
> - * @location: Sensor location as defined in
> - * 'enum occ_sensor_location'
> - * @structure_type: Indicates type of data structure used
> - * for the sensor readings in the ping and
> - * pong buffers for this sensor as defined
> - * in 'enum sensor_struct_type'
> - * @reading_offset: Offset from the start of the ping/pong
> - * reading buffers for this sensor
> - * @sensor_data: Sensor specific info
> - * @pad: Padding to fit the size of 48 bytes.
> - */
> -struct occ_sensor_name {
> - char name[MAX_CHARS_SENSOR_NAME];
> - char units[MAX_CHARS_SENSOR_UNIT];
> - u16 gsid;
> - u32 freq;
> - u32 scale_factor;
> - u16 type;
> - u16 location;
> - u8 structure_type;
> - u32 reading_offset;
> - u8 sensor_data;
> - u8 pad[8];
> -} __attribute__((__packed__));
> -
> -/**
> - * struct occ_sensor_record - Sensor Reading Full
> - * @gsid: Global sensor id (OCC)
> - * @timestamp: Time base counter value while updating
> - * the sensor
> - * @sample: Latest sample of this sensor
> - * @sample_min: Minimum value since last OCC reset
> - * @sample_max: Maximum value since last OCC reset
> - * @csm_min: Minimum value since last reset request
> - * by CSM (CORAL)
> - * @csm_max: Maximum value since last reset request
> - * by CSM (CORAL)
> - * @profiler_min: Minimum value since last reset request
> - * by profiler (CORAL)
> - * @profiler_max: Maximum value since last reset request
> - * by profiler (CORAL)
> - * @job_scheduler_min: Minimum value since last reset request
> - * by job scheduler(CORAL)
> - * @job_scheduler_max: Maximum value since last reset request
> - * by job scheduler (CORAL)
> - * @accumulator: Accumulator for this sensor
> - * @update_tag: Count of the number of ticks that have
> - * passed between updates
> - * @pad: Padding to fit the size of 48 bytes
> - */
> -struct occ_sensor_record {
> - u16 gsid;
> - u64 timestamp;
> - u16 sample;
> - u16 sample_min;
> - u16 sample_max;
> - u16 csm_min;
> - u16 csm_max;
> - u16 profiler_min;
> - u16 profiler_max;
> - u16 job_scheduler_min;
> - u16 job_scheduler_max;
> - u64 accumulator;
> - u32 update_tag;
> - u8 pad[8];
> -} __attribute__((__packed__));
> -
> -/**
> - * struct occ_sensor_counter - Sensor Reading Counter
> - * @gsid: Global sensor id (OCC)
> - * @timestamp: Time base counter value while updating
> - * the sensor
> - * @accumulator: Accumulator/Counter
> - * @sample: Latest sample of this sensor (0/1)
> - * @pad: Padding to fit the size of 24 bytes
> - */
> -struct occ_sensor_counter {
> - u16 gsid;
> - u64 timestamp;
> - u64 accumulator;
> - u8 sample;
> - u8 pad[5];
> -} __attribute__((__packed__));
> diff --git a/include/occ.h b/include/occ.h
> new file mode 100644
> index 000000000000..c9faef9fdfb8
> --- /dev/null
> +++ b/include/occ.h
> @@ -0,0 +1,296 @@
> +/* Copyright 2017 IBM 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.
> + */
> +
> +/* OCC Functions */
> +
> +extern void occ_pstates_init(void);
> +extern void occ_fsp_init(void);
> +
> +/* OCC interrupt for P8 */
> +extern void occ_p8_interrupt(uint32_t chip_id);
> +extern void occ_send_dummy_interrupt(void);
> +
> +/* OCC interrupt for P9 */
> +extern void occ_p9_interrupt(uint32_t chip_id);
> +
> +/* OCC load support */
> +extern void occ_poke_load_queue(void);
> +
> +/* OCC/Host PNOR ownership */
> +enum pnor_owner {
> + PNOR_OWNER_HOST,
> + PNOR_OWNER_EXTERNAL,
> +};
> +extern void occ_pnor_set_owner(enum pnor_owner owner);
> +
> +
> +/* OCC Inband Sensors */
> +extern bool occ_sensors_init(void);
> +extern int occ_sensor_read(u32 handle, u64 *data);
> +extern int occ_sensor_group_clear(u32 group_hndl, int token);
> +extern void occ_add_sensor_groups(struct dt_node *sg, u32 *phandles,
> + u32 *ptype, int nr_phandles, int chipid);
> +
> +extern int occ_sensor_group_enable(u32 group_hndl, int token, bool enable);
> +
> +/*
> + * OCC Sensor Data
> + *
> + * OCC sensor data will use BAR2 (OCC Common is per physical drawer).
> + * Starting address is at offset 0x00580000 from BAR2 base address.
> + * Maximum size is 1.5MB.
> + *
> + * -------------------------------------------------------------------------
> + * | Start (Offset from | End | Size |Description |
> + * | BAR2 base address) | | | |
> + * -------------------------------------------------------------------------
> + * | 0x00580000 | 0x005A57FF |150kB |OCC 0 Sensor Data Block|
> + * | 0x005A5800 | 0x005CAFFF |150kB |OCC 1 Sensor Data Block|
> + * | : | : | : | : |
> + * | 0x00686800 | 0x006ABFFF |150kB |OCC 7 Sensor Data Block|
> + * | 0x006AC000 | 0x006FFFFF |336kB |Reserved |
> + * -------------------------------------------------------------------------
> + *
> + *
> + * OCC N Sensor Data Block Layout (150kB)
> + *
> + * The sensor data block layout is the same for each OCC N. It contains
> + * sensor-header-block, sensor-names buffer, sensor-readings-ping buffer and
> + * sensor-readings-pong buffer.
> + *
> + * ----------------------------------------------------------------------------
> + * | Start (Offset from OCC | End | Size |Description |
> + * | N Sensor Data Block) | | | |
> + * ----------------------------------------------------------------------------
> + * | 0x00000000 | 0x000003FF |1kB |Sensor Data Header Block |
> + * | 0x00000400 | 0x0000CBFF |50kB |Sensor Names |
> + * | 0x0000CC00 | 0x0000DBFF |4kB |Reserved |
> + * | 0x0000DC00 | 0x00017BFF |40kB |Sensor Readings ping buffer|
> + * | 0x00017C00 | 0x00018BFF |4kB |Reserved |
> + * | 0x00018C00 | 0x00022BFF |40kB |Sensor Readings pong buffer|
> + * | 0x00022C00 | 0x000257FF |11kB |Reserved |
> + * ----------------------------------------------------------------------------
> + *
> + * Sensor Data Header Block : This is written once by the OCC during
> + * initialization after a load or reset. Layout is defined in 'struct
> + * occ_sensor_data_header'
> + *
> + * Sensor Names : This is written once by the OCC during initialization after a
> + * load or reset. It contains static information for each sensor. The number of
> + * sensors, format version and length of each sensor is defined in
> + * 'Sensor Data Header Block'. Format of each sensor name is defined in
> + * 'struct occ_sensor_name'. The first sensor starts at offset 0 followed
> + * immediately by the next sensor.
> + *
> + * Sensor Readings Ping/Pong Buffer:
> + * There are two 40kB buffers to store the sensor readings. One buffer that
> + * is currently being updated by the OCC and one that is available to be read.
> + * Each of these buffers will be of the same format. The number of sensors and
> + * the format version of the ping and pong buffers is defined in the
> + * 'Sensor Data Header Block'.
> + *
> + * Each sensor within the ping and pong buffers may be of a different format
> + * and length. For each sensor the length and format is determined by its
> + * 'struct occ_sensor_name.structure_type' in the Sensor Names buffer.
> + *
> + * --------------------------------------------------------------------------
> + * | Offset | Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 |
> + * --------------------------------------------------------------------------
> + * | 0x0000 |Valid | Reserved |
> + * | |(0x01) | |
> + * --------------------------------------------------------------------------
> + * | 0x0008 | Sensor Readings |
> + * --------------------------------------------------------------------------
> + * | : | : |
> + * --------------------------------------------------------------------------
> + * | 0xA000 | End of Data |
> + * --------------------------------------------------------------------------
> + *
> + */
> +
> +#define MAX_OCCS 8
> +#define MAX_CHARS_SENSOR_NAME 16
> +#define MAX_CHARS_SENSOR_UNIT 4
> +
> +#define OCC_SENSOR_DATA_BLOCK_OFFSET 0x00580000
> +#define OCC_SENSOR_DATA_BLOCK_SIZE 0x00025800
> +
> +/*
> + * These should match the definitions inside the OCC source:
> + * occ/src/occ_405/sensor/sensor_info.c
> + */
> +
> +enum occ_sensor_type {
> + OCC_SENSOR_TYPE_GENERIC = 0x0001,
> + OCC_SENSOR_TYPE_CURRENT = 0x0002,
> + OCC_SENSOR_TYPE_VOLTAGE = 0x0004,
> + OCC_SENSOR_TYPE_TEMPERATURE = 0x0008,
> + OCC_SENSOR_TYPE_UTILIZATION = 0x0010,
> + OCC_SENSOR_TYPE_TIME = 0x0020,
> + OCC_SENSOR_TYPE_FREQUENCY = 0x0040,
> + OCC_SENSOR_TYPE_POWER = 0x0080,
> + OCC_SENSOR_TYPE_PERFORMANCE = 0x0200,
> +};
> +
> +#define OCC_ENABLED_SENSOR_MASK (OCC_SENSOR_TYPE_GENERIC | \
> + OCC_SENSOR_TYPE_CURRENT | \
> + OCC_SENSOR_TYPE_VOLTAGE | \
> + OCC_SENSOR_TYPE_TIME | \
> + OCC_SENSOR_TYPE_TEMPERATURE | \
> + OCC_SENSOR_TYPE_POWER | \
> + OCC_SENSOR_TYPE_UTILIZATION | \
> + OCC_SENSOR_TYPE_FREQUENCY | \
> + OCC_SENSOR_TYPE_PERFORMANCE);
> +
> +enum occ_sensor_location {
> + OCC_SENSOR_LOC_SYSTEM = 0x0001,
> + OCC_SENSOR_LOC_PROCESSOR = 0x0002,
> + OCC_SENSOR_LOC_PARTITION = 0x0004,
> + OCC_SENSOR_LOC_MEMORY = 0x0008,
> + OCC_SENSOR_LOC_VRM = 0x0010,
> + OCC_SENSOR_LOC_OCC = 0x0020,
> + OCC_SENSOR_LOC_CORE = 0x0040,
> + OCC_SENSOR_LOC_GPU = 0x0080,
> + OCC_SENSOR_LOC_QUAD = 0x0100,
> +};
> +
> +enum sensor_struct_type {
> + OCC_SENSOR_READING_FULL = 0x01,
> + OCC_SENSOR_READING_COUNTER = 0x02,
> +};
> +
> +/**
> + * struct occ_sensor_data_header - Sensor Data Header Block
> + * @valid: When the value is 0x01 it indicates
> + * that this header block and the sensor
> + * names buffer are ready
> + * @version: Format version of this block
> + * @nr_sensors: Number of sensors in names, ping and
> + * pong buffer
> + * @reading_version: Format version of the Ping/Pong buffer
> + * @names_offset: Offset to the location of names buffer
> + * @names_version: Format version of names buffer
> + * @names_length: Length of each sensor in names buffer
> + * @reading_ping_offset: Offset to the location of Ping buffer
> + * @reading_pong_offset: Offset to the location of Pong buffer
> + * @pad/reserved: Unused data
> + */
> +struct occ_sensor_data_header {
> + u8 valid;
> + u8 version;
> + u16 nr_sensors;
> + u8 reading_version;
> + u8 pad[3];
> + u32 names_offset;
> + u8 names_version;
> + u8 name_length;
> + u16 reserved;
> + u32 reading_ping_offset;
> + u32 reading_pong_offset;
> +} __attribute__((__packed__));
> +
> +/**
> + * struct occ_sensor_name - Format of Sensor Name
> + * @name: Sensor name
> + * @units: Sensor units of measurement
> + * @gsid: Global sensor id (OCC)
> + * @freq: Update frequency
> + * @scale_factor: Scaling factor
> + * @type: Sensor type as defined in
> + * 'enum occ_sensor_type'
> + * @location: Sensor location as defined in
> + * 'enum occ_sensor_location'
> + * @structure_type: Indicates type of data structure used
> + * for the sensor readings in the ping and
> + * pong buffers for this sensor as defined
> + * in 'enum sensor_struct_type'
> + * @reading_offset: Offset from the start of the ping/pong
> + * reading buffers for this sensor
> + * @sensor_data: Sensor specific info
> + * @pad: Padding to fit the size of 48 bytes.
> + */
> +struct occ_sensor_name {
> + char name[MAX_CHARS_SENSOR_NAME];
> + char units[MAX_CHARS_SENSOR_UNIT];
> + u16 gsid;
> + u32 freq;
> + u32 scale_factor;
> + u16 type;
> + u16 location;
> + u8 structure_type;
> + u32 reading_offset;
> + u8 sensor_data;
> + u8 pad[8];
> +} __attribute__((__packed__));
> +
> +/**
> + * struct occ_sensor_record - Sensor Reading Full
> + * @gsid: Global sensor id (OCC)
> + * @timestamp: Time base counter value while updating
> + * the sensor
> + * @sample: Latest sample of this sensor
> + * @sample_min: Minimum value since last OCC reset
> + * @sample_max: Maximum value since last OCC reset
> + * @csm_min: Minimum value since last reset request
> + * by CSM (CORAL)
> + * @csm_max: Maximum value since last reset request
> + * by CSM (CORAL)
> + * @profiler_min: Minimum value since last reset request
> + * by profiler (CORAL)
> + * @profiler_max: Maximum value since last reset request
> + * by profiler (CORAL)
> + * @job_scheduler_min: Minimum value since last reset request
> + * by job scheduler(CORAL)
> + * @job_scheduler_max: Maximum value since last reset request
> + * by job scheduler (CORAL)
> + * @accumulator: Accumulator for this sensor
> + * @update_tag: Count of the number of ticks that have
> + * passed between updates
> + * @pad: Padding to fit the size of 48 bytes
> + */
> +struct occ_sensor_record {
> + u16 gsid;
> + u64 timestamp;
> + u16 sample;
> + u16 sample_min;
> + u16 sample_max;
> + u16 csm_min;
> + u16 csm_max;
> + u16 profiler_min;
> + u16 profiler_max;
> + u16 job_scheduler_min;
> + u16 job_scheduler_max;
> + u64 accumulator;
> + u32 update_tag;
> + u8 pad[8];
> +} __attribute__((__packed__));
> +
> +/**
> + * struct occ_sensor_counter - Sensor Reading Counter
> + * @gsid: Global sensor id (OCC)
> + * @timestamp: Time base counter value while updating
> + * the sensor
> + * @accumulator: Accumulator/Counter
> + * @sample: Latest sample of this sensor (0/1)
> + * @pad: Padding to fit the size of 24 bytes
> + */
> +struct occ_sensor_counter {
> + u16 gsid;
> + u64 timestamp;
> + u64 accumulator;
> + u8 sample;
> + u8 pad[5];
> +} __attribute__((__packed__));
> diff --git a/include/skiboot.h b/include/skiboot.h
> index 989565c1f8b5..bba76c12c39e 100644
> --- a/include/skiboot.h
> +++ b/include/skiboot.h
> @@ -206,10 +206,8 @@ extern void uart_init(void);
> extern void mbox_init(void);
> extern void early_uart_init(void);
> extern void homer_init(void);
> -extern void occ_pstates_init(void);
> extern void slw_init(void);
> extern void add_cpu_idle_state_properties(void);
> -extern void occ_fsp_init(void);
> extern void lpc_rtc_init(void);
>
> /* flash support */
> @@ -242,23 +240,6 @@ enum {
> extern void uart_set_console_policy(int policy);
> extern bool uart_enabled(void);
>
> -/* OCC interrupt for P8 */
> -extern void occ_p8_interrupt(uint32_t chip_id);
> -extern void occ_send_dummy_interrupt(void);
> -
> -/* OCC interrupt for P9 */
> -extern void occ_p9_interrupt(uint32_t chip_id);
> -
> -/* OCC load support */
> -extern void occ_poke_load_queue(void);
> -
> -/* OCC/Host PNOR ownership */
> -enum pnor_owner {
> - PNOR_OWNER_HOST,
> - PNOR_OWNER_EXTERNAL,
> -};
> -extern void occ_pnor_set_owner(enum pnor_owner owner);
> -
> /* PRD */
> extern void prd_psi_interrupt(uint32_t proc);
> extern void prd_tmgt_interrupt(uint32_t proc);
> @@ -310,12 +291,4 @@ extern int fake_nvram_info(uint32_t *total_size);
> extern int fake_nvram_start_read(void *dst, uint32_t src, uint32_t len);
> extern int fake_nvram_write(uint32_t offset, void *src, uint32_t size);
>
> -/* OCC Inband Sensors */
> -extern bool occ_sensors_init(void);
> -extern int occ_sensor_read(u32 handle, u64 *data);
> -extern int occ_sensor_group_clear(u32 group_hndl, int token);
> -extern void occ_add_sensor_groups(struct dt_node *sg, u32 *phandles,
> - u32 *ptype, int nr_phandles, int chipid);
> -
> -extern int occ_sensor_group_enable(u32 group_hndl, int token, bool enable);
> #endif /* __SKIBOOT_H */
> diff --git a/platforms/ibm-fsp/common.c b/platforms/ibm-fsp/common.c
> index d7433e31dcf7..a7f2beedcb78 100644
> --- a/platforms/ibm-fsp/common.c
> +++ b/platforms/ibm-fsp/common.c
> @@ -23,6 +23,7 @@
> #include <hostservices.h>
> #include <ipmi.h>
> #include <debug_descriptor.h>
> +#include <occ.h>
>
> #include "ibm-fsp.h"
>
>
More information about the Skiboot
mailing list