¿Cómo se formulan las frecuencias de SetCPU?

¿Las frecuencias sugeridas por SetCPUpara cada dispositivo se basan en un cierto algoritmo o se elaboró ​​específicamente para el dispositivo o simplemente se formaron arbitrariamente luego de pruebas exhaustivas?

Tengo un viejo HTC Wildfire que tiene una frecuencia máxima en768MHz

Los pasos de frecuencias que muestra el propio SetCPU están 176,264,352,518,576,614,633,652,672,691,710,729,748,768todos en formato MHz.

Eventualmente creé un setcpu.txtarchivo que puse en la raíz de la tarjeta SD. La cosa es que cuando tenía una frecuencia de 800MHz SetCPUlectura, pero la frecuencia máxima que obviamente podía tocar era 768MHz.

Repito, mi pregunta es ¿cómo se SetCPUformulan las frecuencias enumeradas por?

Respuestas (1)

La respuesta se encuentra en la fuente del kernel para ese HTC Wildfire: arch/arm/mach-msm/acpuclock.cconsulte la tabla de frecuencias aceptadas. Dado que el WildFire se basa en el conjunto de chips MSM-7x25, aquí está el extracto de la tabla de frecuencias codificada, asumiendo que es un teléfono GSM:

/* 7x01/7x25 normal with GSM capable modem */
static struct clkctl_acpu_speed pll0_245_pll1_768_pll2_1056[] = {
    { 0, 19200, ACPU_PLL_TCXO, 0, 0, 19200, 0, 0, 30720 },
    { 1, 122880, ACPU_PLL_0, 4, 1,  61440, 1, 3,  61440 },
    { 0, 128000, ACPU_PLL_1, 1, 5,  64000, 1, 3,  61440 },
    { 0, 176000, ACPU_PLL_2, 2, 5,  88000, 1, 3,  61440 },
    { 1, 245760, ACPU_PLL_0, 4, 0,  81920, 2, 4,  61440 },
    { 1, 256000, ACPU_PLL_1, 1, 2, 128000, 1, 5, 128000 },
    { 0, 352000, ACPU_PLL_2, 2, 2,  88000, 3, 5, 128000 },
    { 1, 384000, ACPU_PLL_1, 1, 1, 128000, 2, 6, 128000 },
    { 1, 528000, ACPU_PLL_2, 2, 1, 132000, 3, 7, 128000 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0}, {0, 0, 0} }
};
  • La primera columna indica que la frecuencia se puede escalar, si hay un 1 allí, esa frecuencia del conjunto de chips se puede escalar hacia arriba o hacia abajo, piense en aumentar la CPU cuando se está ejecutando una aplicación que hace un uso intensivo del procesador y eso lo hace el kernel dinámicamente dentro de los límites de un umbral seguro sin quemar el conjunto de chips ; tenga en cuenta: esto es solo para que lo use el kernel, más adelante en la respuesta, que muestra la tabla de overclocking, esa es responsabilidad del "usuario final", ¡no el kernel! !!!!!
  • Segunda columna, la frecuencia normal en KHz dictada por lo que creo que se llama el a11reloj (en algún lugar dentro de las entrañas del conjunto de chips)
  • Tercera columna, no exactamente seguro, pero está específicamente relacionado con el conjunto de chips en sí
  • Cuarta columna, el selector utilizado para el ajuste de frecuencia normal
  • Quinta columna, el divisor utilizado para el ajuste de frecuencia normal
  • Sexta columna, la frecuencia de overclocking en KHz
  • Séptima columna, el selector de frecuencia de overclocking
  • Octava columna, el divisor utilizado para la configuración de frecuencia de overclocking
  • Novena columna, tampoco estoy seguro de lo que eso significa

De hecho, se utilizan 12 campos, los campos restantes se completan en el arranque del kernel, tal vez agregando guardias y asegurando que los valores conservados no se anulen explícitamente, un "guardián" si lo desea, siga leyendo. ..

Más adelante en la fuente, generalmente hay frecuencias de overclocking conservadoras (los conjuntos de chips comunes MSM - 7x 01/25/27 lo admiten ), nuevamente el mismo diseño que los "valores conservadores" como se destacó anteriormente, observe cada uno de las frecuencias se pueden escalar hacia arriba o hacia abajo para cada frecuencia de overclock . Así es como SetCPU puede ajustar esos valores, ya que tiene un 1 en la primera columna.

#ifndef CONFIG_MSM_CPU_FREQ_OVERCLOCK_AHB
/* Conservative AHB overclocking */
    { 0, 403200, ACPU_PLL_2, 2, 2, 134400, 2, 5, 122880 },
    { 1, 480000, ACPU_PLL_0, 4, 1, 160000, 2, 6, 122880 },
    { 1, 595200, ACPU_PLL_2, 2, 1, 198400, 2, 7, 122880 },
    { 1, 604800, ACPU_PLL_2, 2, 1, 201600, 2, 7, 200000 },
    { 1, 614400, ACPU_PLL_0, 4, 0, 204800, 2, 7, 200000 },
    { 1, 633600, ACPU_PLL_0, 4, 0, 211200, 2, 7, 200000 },
    { 1, 652800, ACPU_PLL_0, 4, 0, 217600, 2, 7, 200000 },
    { 1, 672000, ACPU_PLL_0, 4, 0, 224000, 2, 7, 200000 },
    { 1, 691200, ACPU_PLL_0, 4, 0, 230400, 2, 7, 200000 },
    { 1, 710400, ACPU_PLL_0, 4, 0, 236800, 2, 7, 200000 },
    { 1, 729600, ACPU_PLL_0, 4, 0, 243200, 2, 7, 200000 },
    { 1, 748800, ACPU_PLL_0, 4, 0, 249600, 2, 7, 200000 },
    { 1, 768000, ACPU_PLL_0, 4, 0, 256000, 2, 7, 200000 },
    { 1, 787200, ACPU_PLL_0, 4, 0, 262400, 2, 7, 200000 },
    { 1, 806400, ACPU_PLL_0, 4, 0, 268800, 2, 7, 200000 },
//  { 1, 825600, ACPU_PLL_0, 4, 0, 275200, 2, 7, 200000 },
//  { 1, 844800, ACPU_PLL_0, 4, 0, 281600, 2, 7, 200000 },
#else
/* Agressive AHB overclocking */
    { 0, 403200, ACPU_PLL_2, 2, 2, 201600, 1, 5, 200000 },
    { 1, 480000, ACPU_PLL_0, 4, 1, 240000, 1, 6, 200000 },
    { 1, 595200, ACPU_PLL_2, 2, 1, 297600, 1, 7, 200000 },
    { 1, 604800, ACPU_PLL_2, 2, 1, 302400, 1, 7, 200000 },
    { 1, 614400, ACPU_PLL_0, 4, 0, 307200, 1, 7, 200000 },
    { 1, 633600, ACPU_PLL_0, 4, 0, 316800, 1, 7, 200000 },
    { 1, 652800, ACPU_PLL_0, 4, 0, 326400, 1, 7, 200000 },
    { 1, 672000, ACPU_PLL_0, 4, 0, 336000, 1, 7, 200000 },
    { 1, 691200, ACPU_PLL_0, 4, 0, 345600, 1, 7, 200000 },
    { 1, 710400, ACPU_PLL_0, 4, 0, 355200, 1, 7, 200000 },
    { 1, 729600, ACPU_PLL_0, 4, 0, 364800, 1, 7, 200000 },
    { 1, 748800, ACPU_PLL_0, 4, 0, 374400, 1, 7, 200000 },
    { 1, 768000, ACPU_PLL_0, 4, 0, 384000, 1, 7, 200000 },
    { 1, 787200, ACPU_PLL_0, 4, 0, 393600, 1, 7, 200000 },
    { 1, 806400, ACPU_PLL_0, 4, 0, 403200, 1, 7, 200000 },
//  { 1, 825600, ACPU_PLL_0, 4, 0, 412800, 1, 7, 200000 },
//  { 1, 844800, ACPU_PLL_0, 4, 0, 422400, 1, 7, 200000 },
#endif /* CONFIG_MSM_CPU_FREQ_OVERCLOCK_AHB */
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0}, {0, 0, 0} }
};

Dependiendo de las búsquedas en la tabla y del conjunto de chips, solo se especifica el máximo y el kernel lo refuerza (en el resto de los campos del registro que el kernel lee y procesa, ¡como se mencionó anteriormente!)

Eventualmente creé un archivo setcpu.txt que puse en la raíz de la tarjeta SD. La cosa es que cuando tenía una frecuencia de 800 MHz, SetCPU todavía lo leía, pero la frecuencia máxima que obviamente podía tocar era 768 MHz.

¡Es por eso que nunca puede anular el máximo según lo dictado, como en el caso del OP, para evitar daños térmicos en el conjunto de chips y la frecuencia del reloj!

Los reinicios aleatorios, los bloqueos aleatorios, el sobrecalentamiento de la batería más rápido de lo normal (normal dentro del umbral de frecuencia de reloj de la CPU regulado) son síntomas de un conjunto de chips overclockeado.

¡Esta es una gran pista cuando alguien pregunta sobre reinicios aleatorios pero no dice que probablemente esté overclockeado!

versión tl;dr: depende del kernel :)
@Chahk no es cierto: el kernel de los fabricantes de dispositivos (es decir, si cumplen con GPL) en realidad lo tiene como predeterminado: acpuclock.cen realidad está diseñado para conjuntos de chips Qualcomm, habrá variantes para conjuntos de chips ARMv7 como acpuclock-7x30.c, acpuclock--8x50a.co incluso acpuclock-8x50.c, estos son para Qualcomm conjuntos de chips, habrá variantes en los otros subdirectorios del kernel debajo arch/, además, ¡para usar el overclocking se requiere root!