1*11f4dc15SSimon Glass /* 2*11f4dc15SSimon Glass * Copyright (c) 2015 Google, Inc 3*11f4dc15SSimon Glass * Written by Simon Glass <sjg@chromium.org> 4*11f4dc15SSimon Glass * 5*11f4dc15SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 6*11f4dc15SSimon Glass */ 7*11f4dc15SSimon Glass 8*11f4dc15SSimon Glass #ifndef __CPU_H 9*11f4dc15SSimon Glass #define __CPU_H 10*11f4dc15SSimon Glass 11*11f4dc15SSimon Glass /** 12*11f4dc15SSimon Glass * struct cpu_platdata - platform data for a CPU 13*11f4dc15SSimon Glass * 14*11f4dc15SSimon Glass * This can be accessed with dev_get_parent_platdata() for any UCLASS_CPU 15*11f4dc15SSimon Glass * device. 16*11f4dc15SSimon Glass * 17*11f4dc15SSimon Glass * @cpu_id: Platform-specific way of identifying the CPU. 18*11f4dc15SSimon Glass */ 19*11f4dc15SSimon Glass struct cpu_platdata { 20*11f4dc15SSimon Glass int cpu_id; 21*11f4dc15SSimon Glass }; 22*11f4dc15SSimon Glass 23*11f4dc15SSimon Glass /* CPU features - mostly just a placeholder for now */ 24*11f4dc15SSimon Glass enum { 25*11f4dc15SSimon Glass CPU_FEAT_L1_CACHE = 0, /* Supports level 1 cache */ 26*11f4dc15SSimon Glass CPU_FEAT_MMU = 1, /* Supports virtual memory */ 27*11f4dc15SSimon Glass 28*11f4dc15SSimon Glass CPU_FEAT_COUNT, 29*11f4dc15SSimon Glass }; 30*11f4dc15SSimon Glass 31*11f4dc15SSimon Glass /** 32*11f4dc15SSimon Glass * struct cpu_info - Information about a CPU 33*11f4dc15SSimon Glass * 34*11f4dc15SSimon Glass * @cpu_freq: Current CPU frequency in Hz 35*11f4dc15SSimon Glass * @features: Flags for supported CPU features 36*11f4dc15SSimon Glass */ 37*11f4dc15SSimon Glass struct cpu_info { 38*11f4dc15SSimon Glass ulong cpu_freq; 39*11f4dc15SSimon Glass ulong features; 40*11f4dc15SSimon Glass }; 41*11f4dc15SSimon Glass 42*11f4dc15SSimon Glass struct cpu_ops { 43*11f4dc15SSimon Glass /** 44*11f4dc15SSimon Glass * get_desc() - Get a description string for a CPU 45*11f4dc15SSimon Glass * 46*11f4dc15SSimon Glass * @dev: Device to check (UCLASS_CPU) 47*11f4dc15SSimon Glass * @buf: Buffer to place string 48*11f4dc15SSimon Glass * @size: Size of string space 49*11f4dc15SSimon Glass * @return 0 if OK, -ENOSPC if buffer is too small, other -ve on error 50*11f4dc15SSimon Glass */ 51*11f4dc15SSimon Glass int (*get_desc)(struct udevice *dev, char *buf, int size); 52*11f4dc15SSimon Glass 53*11f4dc15SSimon Glass /** 54*11f4dc15SSimon Glass * get_info() - Get information about a CPU 55*11f4dc15SSimon Glass * 56*11f4dc15SSimon Glass * @dev: Device to check (UCLASS_CPU) 57*11f4dc15SSimon Glass * @info: Returns CPU info 58*11f4dc15SSimon Glass * @return 0 if OK, -ve on error 59*11f4dc15SSimon Glass */ 60*11f4dc15SSimon Glass int (*get_info)(struct udevice *dev, struct cpu_info *info); 61*11f4dc15SSimon Glass }; 62*11f4dc15SSimon Glass 63*11f4dc15SSimon Glass #define cpu_get_ops(dev) ((struct cpu_ops *)(dev)->driver->ops) 64*11f4dc15SSimon Glass 65*11f4dc15SSimon Glass /** 66*11f4dc15SSimon Glass * cpu_get_desc() - Get a description string for a CPU 67*11f4dc15SSimon Glass * 68*11f4dc15SSimon Glass * @dev: Device to check (UCLASS_CPU) 69*11f4dc15SSimon Glass * @buf: Buffer to place string 70*11f4dc15SSimon Glass * @size: Size of string space 71*11f4dc15SSimon Glass * @return 0 if OK, -ENOSPC if buffer is too small, other -ve on error 72*11f4dc15SSimon Glass */ 73*11f4dc15SSimon Glass int cpu_get_desc(struct udevice *dev, char *buf, int size); 74*11f4dc15SSimon Glass 75*11f4dc15SSimon Glass /** 76*11f4dc15SSimon Glass * cpu_get_info() - Get information about a CPU 77*11f4dc15SSimon Glass * 78*11f4dc15SSimon Glass * @dev: Device to check (UCLASS_CPU) 79*11f4dc15SSimon Glass * @info: Returns CPU info 80*11f4dc15SSimon Glass * @return 0 if OK, -ve on error 81*11f4dc15SSimon Glass */ 82*11f4dc15SSimon Glass int cpu_get_info(struct udevice *dev, struct cpu_info *info); 83*11f4dc15SSimon Glass 84*11f4dc15SSimon Glass #endif 85