Lines Matching +full:max +full:- +full:freq

1 /*-
2 * Copyright (C) 2013-2015 Daisuke Aoyama <aoyama@peach.ne.jp>
61 #define HZ2MHZ(freq) ((freq) / (1000 * 1000))
62 #define MHZ2HZ(freq) ((freq) * (1000 * 1000))
71 #define MIN_OVER_VOLTAGE -16
73 #define MSG_ERROR -999999999
85 /* ARM->VC mailbox property semaphore */
115 { "broadcom,bcm2835-vc", 1 },
116 { "broadcom,bcm2708-vc", 1 },
176 err = bcm2835_firmware_property(sc->firmware,
179 device_printf(sc->dev, "can't get clock rate (id=%u)\n",
199 * Get max clock rate
217 err = bcm2835_firmware_property(sc->firmware,
220 device_printf(sc->dev, "can't get max clock rate (id=%u)\n",
258 err = bcm2835_firmware_property(sc->firmware,
261 device_printf(sc->dev, "can't get min clock rate (id=%u)\n",
301 err = bcm2835_firmware_property(sc->firmware,
304 device_printf(sc->dev, "can't set clock rate (id=%u)\n",
325 err = bcm2835_firmware_property(sc->firmware,
328 device_printf(sc->dev,
366 err = bcm2835_firmware_property(sc->firmware,
369 device_printf(sc->dev, "can't get turbo\n");
373 /* result 0=non-turbo, 1=turbo */
412 err = bcm2835_firmware_property(sc->firmware,
415 device_printf(sc->dev, "can't set turbo\n");
419 /* result 0=non-turbo, 1=turbo */
452 err = bcm2835_firmware_property(sc->firmware,
455 device_printf(sc->dev, "can't get voltage\n");
492 err = bcm2835_firmware_property(sc->firmware,
495 device_printf(sc->dev, "can't get max voltage\n");
531 err = bcm2835_firmware_property(sc->firmware,
534 device_printf(sc->dev, "can't get min voltage\n");
573 device_printf(sc->dev, "not supported voltage: %d\n", value);
583 err = bcm2835_firmware_property(sc->firmware,
586 device_printf(sc->dev, "can't set voltage\n");
622 err = bcm2835_firmware_property(sc->firmware,
625 device_printf(sc->dev, "can't get temperature\n");
650 if (err || !req->newptr) /* error || read request */
659 device_printf(sc->dev, "set clock arm_freq error\n");
683 if (err || !req->newptr) /* error || read request */
692 device_printf(sc->dev, "set clock core_freq error\n");
717 if (err || !req->newptr) /* error || read request */
726 device_printf(sc->dev, "set clock sdram_freq error\n");
749 if (err || !req->newptr) /* error || read request */
754 sc->turbo_mode = BCM2835_FIRMWARE_TURBO_ON;
756 sc->turbo_mode = BCM2835_FIRMWARE_TURBO_OFF;
759 err = bcm2835_cpufreq_set_turbo(sc, sc->turbo_mode);
762 device_printf(sc->dev, "set turbo error\n");
785 if (err || !req->newptr) /* error || read request */
791 sc->voltage_core = val;
795 sc->voltage_core);
798 device_printf(sc->dev, "set voltage core error\n");
822 if (err || !req->newptr) /* error || read request */
828 sc->voltage_sdram_c = val;
833 sc->voltage_sdram_c);
836 device_printf(sc->dev, "set voltage sdram_c error\n");
860 if (err || !req->newptr) /* error || read request */
866 sc->voltage_sdram_i = val;
870 BCM2835_FIRMWARE_VOLTAGE_ID_SDRAM_I, sc->voltage_sdram_i);
873 device_printf(sc->dev, "set voltage sdram_i error\n");
897 if (err || !req->newptr) /* error || read request */
903 sc->voltage_sdram_p = val;
907 BCM2835_FIRMWARE_VOLTAGE_ID_SDRAM_P, sc->voltage_sdram_p);
910 device_printf(sc->dev, "set voltage sdram_p error\n");
926 if (!req->newptr)
936 sc->voltage_sdram = val;
943 device_printf(sc->dev, "set voltage sdram_c error\n");
950 device_printf(sc->dev, "set voltage sdram_i error\n");
957 device_printf(sc->dev, "set voltage sdram_p error\n");
981 if (err || !req->newptr) /* error || read request */
1006 if (err || !req->newptr) /* error || read request */
1039 /* max/min clock */
1056 sc->turbo_mode = BCM2835_FIRMWARE_TURBO_ON;
1058 sc->turbo_mode = BCM2835_FIRMWARE_TURBO_OFF;
1071 sc->voltage_core = voltage_core;
1072 sc->voltage_sdram = voltage_sdram_c;
1073 sc->voltage_sdram_c = voltage_sdram_c;
1074 sc->voltage_sdram_i = voltage_sdram_i;
1075 sc->voltage_sdram_p = voltage_sdram_p;
1077 /* max/min voltage */
1100 device_printf(sc->dev, "Boot settings:\n");
1101 device_printf(sc->dev,
1104 (sc->turbo_mode == BCM2835_FIRMWARE_TURBO_ON) ? "ON":"OFF");
1106 device_printf(sc->dev,
1107 "max/min ARM %d/%dMHz, Core %d/%dMHz, SDRAM %d/%dMHz\n",
1112 device_printf(sc->dev,
1119 device_printf(sc->dev,
1120 "max/min Core %d/%dmV, SDRAM_C %d/%dmV, SDRAM_I %d/%dmV, "
1131 device_printf(sc->dev,
1135 device_printf(sc->dev,
1138 (sc->turbo_mode == BCM2835_FIRMWARE_TURBO_ON) ? "ON":"OFF");
1142 sc->arm_max_freq = HZ2MHZ(arm_max_freq);
1143 sc->arm_min_freq = HZ2MHZ(arm_min_freq);
1144 sc->core_max_freq = HZ2MHZ(core_max_freq);
1145 sc->core_min_freq = HZ2MHZ(core_min_freq);
1146 sc->sdram_max_freq = HZ2MHZ(sdram_max_freq);
1147 sc->sdram_min_freq = HZ2MHZ(sdram_min_freq);
1148 sc->max_voltage_core = OFFSET2MVOLT(max_voltage_core);
1149 sc->min_voltage_core = OFFSET2MVOLT(min_voltage_core);
1151 /* if turbo is on, set to max values */
1152 if (sc->turbo_mode == BCM2835_FIRMWARE_TURBO_ON) {
1177 cpu = device_get_parent(sc->dev);
1189 config_intrhook_disestablish(&sc->init_hook);
1199 for (compat = compat_data; compat->ocd_str != NULL; compat++)
1200 if (ofw_bus_node_is_compatible(root, compat->ocd_str))
1203 if (compat->ocd_data == 0)
1207 if (device_find_child(parent, "bcm2835_cpufreq", -1) != NULL)
1209 if (BUS_ADD_CHILD(parent, 0, "bcm2835_cpufreq", -1) == NULL)
1232 sc->dev = dev;
1233 sc->firmware = devclass_get_device(
1235 if (sc->firmware == NULL) {
1241 sc->arm_max_freq = -1;
1242 sc->arm_min_freq = -1;
1243 sc->core_max_freq = -1;
1244 sc->core_min_freq = -1;
1245 sc->sdram_max_freq = -1;
1246 sc->sdram_min_freq = -1;
1247 sc->max_voltage_core = 0;
1248 sc->min_voltage_core = 0;
1321 /* ARM->VC lock */
1325 sc->init_hook.ich_func = bcm2835_cpufreq_init;
1326 sc->init_hook.ich_arg = sc;
1328 if (config_intrhook_establish(&sc->init_hook) != 0) {
1358 if (cf == NULL || cf->freq < 0)
1364 rate_hz = (uint32_t)MHZ2HZ(cf->freq);
1366 rate_hz -= rem;
1370 /* adjust min freq */
1371 min_freq = sc->arm_min_freq;
1372 if (sc->turbo_mode != BCM2835_FIRMWARE_TURBO_ON)
1376 if (rate_hz < MHZ2HZ(min_freq) || rate_hz > MHZ2HZ(sc->arm_max_freq))
1392 * if non-turbo and lower than or equal min_freq,
1395 if (sc->turbo_mode != BCM2835_FIRMWARE_TURBO_ON) {
1398 if (rate_hz > MHZ2HZ(sc->arm_min_freq)) {
1401 MHZ2HZ(sc->core_max_freq));
1405 MHZ2HZ(sc->sdram_max_freq));
1408 if (sc->core_min_freq < DEFAULT_CORE_FREQUENCY &&
1423 MHZ2HZ(sc->core_min_freq));
1427 MHZ2HZ(sc->sdram_min_freq));
1435 device_printf(dev, "wrong freq\n");
1438 DPRINTF("cpufreq: %d -> %d\n", cur_freq, arm_freq);
1454 cf->dev = NULL;
1467 cf->freq = HZ2MHZ(arm_freq);
1469 cf->volts = CPUFREQ_VAL_UNKNOWN;
1471 cf->power = CPUFREQ_VAL_UNKNOWN;
1473 cf->lat = TRANSITION_LATENCY;
1475 cf->dev = dev;
1485 int freq, min_freq, volts, rem;
1489 freq = sc->arm_max_freq;
1490 min_freq = sc->arm_min_freq;
1492 /* adjust head freq to STEP */
1493 rem = freq % MHZSTEP;
1494 freq -= rem;
1495 if (freq < min_freq)
1496 freq = min_freq;
1498 /* if non-turbo, add extra low freq */
1499 if (sc->turbo_mode != BCM2835_FIRMWARE_TURBO_ON)
1505 volts = sc->min_voltage_core;
1506 sets[idx].freq = freq;
1511 if (freq != min_freq) {
1512 sets[idx].freq = min_freq;
1532 if (sc->arm_min_freq < 0 || sc->arm_max_freq < 0) {