111f4dc15SSimon Glass /* 211f4dc15SSimon Glass * Copyright (c) 2015 Google, Inc 311f4dc15SSimon Glass * Written by Simon Glass <sjg@chromium.org> 411f4dc15SSimon Glass * 511f4dc15SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 611f4dc15SSimon Glass */ 711f4dc15SSimon Glass 811f4dc15SSimon Glass #ifndef __CPU_H 911f4dc15SSimon Glass #define __CPU_H 1011f4dc15SSimon Glass 1111f4dc15SSimon Glass /** 1211f4dc15SSimon Glass * struct cpu_platdata - platform data for a CPU 1311f4dc15SSimon Glass * 1411f4dc15SSimon Glass * This can be accessed with dev_get_parent_platdata() for any UCLASS_CPU 1511f4dc15SSimon Glass * device. 1611f4dc15SSimon Glass * 1711f4dc15SSimon Glass * @cpu_id: Platform-specific way of identifying the CPU. 1811f4dc15SSimon Glass */ 1911f4dc15SSimon Glass struct cpu_platdata { 2011f4dc15SSimon Glass int cpu_id; 2111f4dc15SSimon Glass }; 2211f4dc15SSimon Glass 2311f4dc15SSimon Glass /* CPU features - mostly just a placeholder for now */ 2411f4dc15SSimon Glass enum { 2511f4dc15SSimon Glass CPU_FEAT_L1_CACHE = 0, /* Supports level 1 cache */ 2611f4dc15SSimon Glass CPU_FEAT_MMU = 1, /* Supports virtual memory */ 2711f4dc15SSimon Glass 2811f4dc15SSimon Glass CPU_FEAT_COUNT, 2911f4dc15SSimon Glass }; 3011f4dc15SSimon Glass 3111f4dc15SSimon Glass /** 3211f4dc15SSimon Glass * struct cpu_info - Information about a CPU 3311f4dc15SSimon Glass * 3411f4dc15SSimon Glass * @cpu_freq: Current CPU frequency in Hz 3511f4dc15SSimon Glass * @features: Flags for supported CPU features 3611f4dc15SSimon Glass */ 3711f4dc15SSimon Glass struct cpu_info { 3811f4dc15SSimon Glass ulong cpu_freq; 3911f4dc15SSimon Glass ulong features; 4011f4dc15SSimon Glass }; 4111f4dc15SSimon Glass 4211f4dc15SSimon Glass struct cpu_ops { 4311f4dc15SSimon Glass /** 4411f4dc15SSimon Glass * get_desc() - Get a description string for a CPU 4511f4dc15SSimon Glass * 4611f4dc15SSimon Glass * @dev: Device to check (UCLASS_CPU) 4711f4dc15SSimon Glass * @buf: Buffer to place string 4811f4dc15SSimon Glass * @size: Size of string space 4911f4dc15SSimon Glass * @return 0 if OK, -ENOSPC if buffer is too small, other -ve on error 5011f4dc15SSimon Glass */ 5111f4dc15SSimon Glass int (*get_desc)(struct udevice *dev, char *buf, int size); 5211f4dc15SSimon Glass 5311f4dc15SSimon Glass /** 5411f4dc15SSimon Glass * get_info() - Get information about a CPU 5511f4dc15SSimon Glass * 5611f4dc15SSimon Glass * @dev: Device to check (UCLASS_CPU) 5711f4dc15SSimon Glass * @info: Returns CPU info 5811f4dc15SSimon Glass * @return 0 if OK, -ve on error 5911f4dc15SSimon Glass */ 6011f4dc15SSimon Glass int (*get_info)(struct udevice *dev, struct cpu_info *info); 61*780bfdd3SBin Meng 62*780bfdd3SBin Meng /** 63*780bfdd3SBin Meng * get_count() - Get number of CPUs 64*780bfdd3SBin Meng * 65*780bfdd3SBin Meng * @dev: Device to check (UCLASS_CPU) 66*780bfdd3SBin Meng * @return CPU count if OK, -ve on error 67*780bfdd3SBin Meng */ 68*780bfdd3SBin Meng int (*get_count)(struct udevice *dev); 6911f4dc15SSimon Glass }; 7011f4dc15SSimon Glass 7111f4dc15SSimon Glass #define cpu_get_ops(dev) ((struct cpu_ops *)(dev)->driver->ops) 7211f4dc15SSimon Glass 7311f4dc15SSimon Glass /** 7411f4dc15SSimon Glass * cpu_get_desc() - Get a description string for a CPU 7511f4dc15SSimon Glass * 7611f4dc15SSimon Glass * @dev: Device to check (UCLASS_CPU) 7711f4dc15SSimon Glass * @buf: Buffer to place string 7811f4dc15SSimon Glass * @size: Size of string space 7911f4dc15SSimon Glass * @return 0 if OK, -ENOSPC if buffer is too small, other -ve on error 8011f4dc15SSimon Glass */ 8111f4dc15SSimon Glass int cpu_get_desc(struct udevice *dev, char *buf, int size); 8211f4dc15SSimon Glass 8311f4dc15SSimon Glass /** 8411f4dc15SSimon Glass * cpu_get_info() - Get information about a CPU 8511f4dc15SSimon Glass * 8611f4dc15SSimon Glass * @dev: Device to check (UCLASS_CPU) 8711f4dc15SSimon Glass * @info: Returns CPU info 8811f4dc15SSimon Glass * @return 0 if OK, -ve on error 8911f4dc15SSimon Glass */ 9011f4dc15SSimon Glass int cpu_get_info(struct udevice *dev, struct cpu_info *info); 9111f4dc15SSimon Glass 92*780bfdd3SBin Meng /** 93*780bfdd3SBin Meng * cpu_get_count() - Get number of CPUs 94*780bfdd3SBin Meng * 95*780bfdd3SBin Meng * @dev: Device to check (UCLASS_CPU) 96*780bfdd3SBin Meng * @return CPU count if OK, -ve on error 97*780bfdd3SBin Meng */ 98*780bfdd3SBin Meng int cpu_get_count(struct udevice *dev); 99*780bfdd3SBin Meng 10011f4dc15SSimon Glass #endif 101