devfreq.c 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * devfreq: Generic Dynamic Voltage and Frequency Scaling (DVFS) Framework
  4. * for Non-CPU Devices.
  5. *
  6. * Copyright (C) 2011 Samsung Electronics
  7. * MyungJoo Ham <myungjoo.ham@samsung.com>
  8. */
  9. #include <linux/kernel.h>
  10. #include <linux/kmod.h>
  11. #include <linux/sched.h>
  12. #include <linux/debugfs.h>
  13. #include <linux/devfreq_cooling.h>
  14. #include <linux/errno.h>
  15. #include <linux/err.h>
  16. #include <linux/init.h>
  17. #include <linux/export.h>
  18. #include <linux/slab.h>
  19. #include <linux/stat.h>
  20. #include <linux/pm_opp.h>
  21. #include <linux/devfreq.h>
  22. #include <linux/devfreq-governor.h>
  23. #include <linux/workqueue.h>
  24. #include <linux/platform_device.h>
  25. #include <linux/list.h>
  26. #include <linux/printk.h>
  27. #include <linux/hrtimer.h>
  28. #include <linux/of.h>
  29. #include <linux/pm_qos.h>
  30. #include <linux/units.h>
  31. #define CREATE_TRACE_POINTS
  32. #include <trace/events/devfreq.h>
  33. #define IS_SUPPORTED_FLAG(f, name) ((f & DEVFREQ_GOV_FLAG_##name) ? true : false)
  34. #define IS_SUPPORTED_ATTR(f, name) ((f & DEVFREQ_GOV_ATTR_##name) ? true : false)
  35. static struct class *devfreq_class;
  36. static struct dentry *devfreq_debugfs;
  37. /*
  38. * devfreq core provides delayed work based load monitoring helper
  39. * functions. Governors can use these or can implement their own
  40. * monitoring mechanism.
  41. */
  42. static struct workqueue_struct *devfreq_wq;
  43. /* The list of all device-devfreq governors */
  44. static LIST_HEAD(devfreq_governor_list);
  45. /* The list of all device-devfreq */
  46. static LIST_HEAD(devfreq_list);
  47. static DEFINE_MUTEX(devfreq_list_lock);
  48. static const char timer_name[][DEVFREQ_NAME_LEN] = {
  49. [DEVFREQ_TIMER_DEFERRABLE] = { "deferrable" },
  50. [DEVFREQ_TIMER_DELAYED] = { "delayed" },
  51. };
  52. /**
  53. * find_device_devfreq() - find devfreq struct using device pointer
  54. * @dev: device pointer used to lookup device devfreq.
  55. *
  56. * Search the list of device devfreqs and return the matched device's
  57. * devfreq info. devfreq_list_lock should be held by the caller.
  58. */
  59. static struct devfreq *find_device_devfreq(struct device *dev)
  60. {
  61. struct devfreq *tmp_devfreq;
  62. lockdep_assert_held(&devfreq_list_lock);
  63. if (IS_ERR_OR_NULL(dev)) {
  64. pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
  65. return ERR_PTR(-EINVAL);
  66. }
  67. list_for_each_entry(tmp_devfreq, &devfreq_list, node) {
  68. if (tmp_devfreq->dev.parent == dev)
  69. return tmp_devfreq;
  70. }
  71. return ERR_PTR(-ENODEV);
  72. }
  73. static unsigned long find_available_min_freq(struct devfreq *devfreq)
  74. {
  75. struct dev_pm_opp *opp;
  76. unsigned long min_freq = 0;
  77. opp = dev_pm_opp_find_freq_ceil_indexed(devfreq->dev.parent, &min_freq, 0);
  78. if (IS_ERR(opp))
  79. min_freq = 0;
  80. else
  81. dev_pm_opp_put(opp);
  82. return min_freq;
  83. }
  84. static unsigned long find_available_max_freq(struct devfreq *devfreq)
  85. {
  86. struct dev_pm_opp *opp;
  87. unsigned long max_freq = ULONG_MAX;
  88. opp = dev_pm_opp_find_freq_floor_indexed(devfreq->dev.parent, &max_freq, 0);
  89. if (IS_ERR(opp))
  90. max_freq = 0;
  91. else
  92. dev_pm_opp_put(opp);
  93. return max_freq;
  94. }
  95. /**
  96. * devfreq_get_freq_range() - Get the current freq range
  97. * @devfreq: the devfreq instance
  98. * @min_freq: the min frequency
  99. * @max_freq: the max frequency
  100. *
  101. * This takes into consideration all constraints.
  102. */
  103. void devfreq_get_freq_range(struct devfreq *devfreq,
  104. unsigned long *min_freq,
  105. unsigned long *max_freq)
  106. {
  107. unsigned long *freq_table = devfreq->freq_table;
  108. s32 qos_min_freq, qos_max_freq;
  109. lockdep_assert_held(&devfreq->lock);
  110. /*
  111. * Initialize minimum/maximum frequency from freq table.
  112. * The devfreq drivers can initialize this in either ascending or
  113. * descending order and devfreq core supports both.
  114. */
  115. if (freq_table[0] < freq_table[devfreq->max_state - 1]) {
  116. *min_freq = freq_table[0];
  117. *max_freq = freq_table[devfreq->max_state - 1];
  118. } else {
  119. *min_freq = freq_table[devfreq->max_state - 1];
  120. *max_freq = freq_table[0];
  121. }
  122. /* Apply constraints from PM QoS */
  123. qos_min_freq = dev_pm_qos_read_value(devfreq->dev.parent,
  124. DEV_PM_QOS_MIN_FREQUENCY);
  125. qos_max_freq = dev_pm_qos_read_value(devfreq->dev.parent,
  126. DEV_PM_QOS_MAX_FREQUENCY);
  127. *min_freq = max(*min_freq, (unsigned long)HZ_PER_KHZ * qos_min_freq);
  128. if (qos_max_freq != PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE)
  129. *max_freq = min(*max_freq,
  130. (unsigned long)HZ_PER_KHZ * qos_max_freq);
  131. /* Apply constraints from OPP interface */
  132. *max_freq = clamp(*max_freq, devfreq->scaling_min_freq, devfreq->scaling_max_freq);
  133. *min_freq = clamp(*min_freq, devfreq->scaling_min_freq, *max_freq);
  134. }
  135. EXPORT_SYMBOL(devfreq_get_freq_range);
  136. /**
  137. * devfreq_get_freq_level() - Lookup freq_table for the frequency
  138. * @devfreq: the devfreq instance
  139. * @freq: the target frequency
  140. */
  141. static int devfreq_get_freq_level(struct devfreq *devfreq, unsigned long freq)
  142. {
  143. int lev;
  144. for (lev = 0; lev < devfreq->max_state; lev++)
  145. if (freq == devfreq->freq_table[lev])
  146. return lev;
  147. return -EINVAL;
  148. }
  149. static int set_freq_table(struct devfreq *devfreq)
  150. {
  151. struct dev_pm_opp *opp;
  152. unsigned long freq;
  153. int i, count;
  154. /* Initialize the freq_table from OPP table */
  155. count = dev_pm_opp_get_opp_count(devfreq->dev.parent);
  156. if (count <= 0)
  157. return -EINVAL;
  158. devfreq->max_state = count;
  159. devfreq->freq_table = devm_kcalloc(devfreq->dev.parent,
  160. devfreq->max_state,
  161. sizeof(*devfreq->freq_table),
  162. GFP_KERNEL);
  163. if (!devfreq->freq_table)
  164. return -ENOMEM;
  165. for (i = 0, freq = 0; i < devfreq->max_state; i++, freq++) {
  166. opp = dev_pm_opp_find_freq_ceil_indexed(devfreq->dev.parent, &freq, 0);
  167. if (IS_ERR(opp)) {
  168. devm_kfree(devfreq->dev.parent, devfreq->freq_table);
  169. return PTR_ERR(opp);
  170. }
  171. dev_pm_opp_put(opp);
  172. devfreq->freq_table[i] = freq;
  173. }
  174. return 0;
  175. }
  176. /**
  177. * devfreq_update_status() - Update statistics of devfreq behavior
  178. * @devfreq: the devfreq instance
  179. * @freq: the update target frequency
  180. */
  181. int devfreq_update_status(struct devfreq *devfreq, unsigned long freq)
  182. {
  183. int lev, prev_lev, ret = 0;
  184. u64 cur_time;
  185. lockdep_assert_held(&devfreq->lock);
  186. cur_time = get_jiffies_64();
  187. /* Immediately exit if previous_freq is not initialized yet. */
  188. if (!devfreq->previous_freq)
  189. goto out;
  190. prev_lev = devfreq_get_freq_level(devfreq, devfreq->previous_freq);
  191. if (prev_lev < 0) {
  192. ret = prev_lev;
  193. goto out;
  194. }
  195. devfreq->stats.time_in_state[prev_lev] +=
  196. cur_time - devfreq->stats.last_update;
  197. lev = devfreq_get_freq_level(devfreq, freq);
  198. if (lev < 0) {
  199. ret = lev;
  200. goto out;
  201. }
  202. if (lev != prev_lev) {
  203. devfreq->stats.trans_table[
  204. (prev_lev * devfreq->max_state) + lev]++;
  205. devfreq->stats.total_trans++;
  206. }
  207. out:
  208. devfreq->stats.last_update = cur_time;
  209. return ret;
  210. }
  211. EXPORT_SYMBOL(devfreq_update_status);
  212. /**
  213. * find_devfreq_governor() - find devfreq governor from name
  214. * @name: name of the governor
  215. *
  216. * Search the list of devfreq governors and return the matched
  217. * governor's pointer. devfreq_list_lock should be held by the caller.
  218. */
  219. static struct devfreq_governor *find_devfreq_governor(const char *name)
  220. {
  221. struct devfreq_governor *tmp_governor;
  222. lockdep_assert_held(&devfreq_list_lock);
  223. if (IS_ERR_OR_NULL(name)) {
  224. pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
  225. return ERR_PTR(-EINVAL);
  226. }
  227. list_for_each_entry(tmp_governor, &devfreq_governor_list, node) {
  228. if (!strncmp(tmp_governor->name, name, DEVFREQ_NAME_LEN))
  229. return tmp_governor;
  230. }
  231. return ERR_PTR(-ENODEV);
  232. }
  233. /**
  234. * try_then_request_governor() - Try to find the governor and request the
  235. * module if is not found.
  236. * @name: name of the governor
  237. *
  238. * Search the list of devfreq governors and request the module and try again
  239. * if is not found. This can happen when both drivers (the governor driver
  240. * and the driver that call devfreq_add_device) are built as modules.
  241. * devfreq_list_lock should be held by the caller. Returns the matched
  242. * governor's pointer or an error pointer.
  243. */
  244. static struct devfreq_governor *try_then_request_governor(const char *name)
  245. {
  246. struct devfreq_governor *governor;
  247. int err = 0;
  248. lockdep_assert_held(&devfreq_list_lock);
  249. if (IS_ERR_OR_NULL(name)) {
  250. pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
  251. return ERR_PTR(-EINVAL);
  252. }
  253. governor = find_devfreq_governor(name);
  254. if (IS_ERR(governor)) {
  255. mutex_unlock(&devfreq_list_lock);
  256. if (!strncmp(name, DEVFREQ_GOV_SIMPLE_ONDEMAND,
  257. DEVFREQ_NAME_LEN))
  258. err = request_module("governor_%s", "simpleondemand");
  259. else
  260. err = request_module("governor_%s", name);
  261. /* Restore previous state before return */
  262. mutex_lock(&devfreq_list_lock);
  263. if (err)
  264. return (err < 0) ? ERR_PTR(err) : ERR_PTR(-EINVAL);
  265. governor = find_devfreq_governor(name);
  266. }
  267. return governor;
  268. }
  269. static int devfreq_notify_transition(struct devfreq *devfreq,
  270. struct devfreq_freqs *freqs, unsigned int state)
  271. {
  272. if (!devfreq)
  273. return -EINVAL;
  274. switch (state) {
  275. case DEVFREQ_PRECHANGE:
  276. srcu_notifier_call_chain(&devfreq->transition_notifier_list,
  277. DEVFREQ_PRECHANGE, freqs);
  278. break;
  279. case DEVFREQ_POSTCHANGE:
  280. srcu_notifier_call_chain(&devfreq->transition_notifier_list,
  281. DEVFREQ_POSTCHANGE, freqs);
  282. break;
  283. default:
  284. return -EINVAL;
  285. }
  286. return 0;
  287. }
  288. static int devfreq_set_target(struct devfreq *devfreq, unsigned long new_freq,
  289. u32 flags)
  290. {
  291. struct devfreq_freqs freqs;
  292. unsigned long cur_freq;
  293. int err = 0;
  294. if (devfreq->profile->get_cur_freq)
  295. devfreq->profile->get_cur_freq(devfreq->dev.parent, &cur_freq);
  296. else
  297. cur_freq = devfreq->previous_freq;
  298. freqs.old = cur_freq;
  299. freqs.new = new_freq;
  300. devfreq_notify_transition(devfreq, &freqs, DEVFREQ_PRECHANGE);
  301. err = devfreq->profile->target(devfreq->dev.parent, &new_freq, flags);
  302. if (err) {
  303. freqs.new = cur_freq;
  304. devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE);
  305. return err;
  306. }
  307. /*
  308. * Print devfreq_frequency trace information between DEVFREQ_PRECHANGE
  309. * and DEVFREQ_POSTCHANGE because for showing the correct frequency
  310. * change order of between devfreq device and passive devfreq device.
  311. */
  312. if (trace_devfreq_frequency_enabled() && new_freq != cur_freq)
  313. trace_devfreq_frequency(devfreq, new_freq, cur_freq);
  314. freqs.new = new_freq;
  315. devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE);
  316. if (devfreq_update_status(devfreq, new_freq))
  317. dev_warn(&devfreq->dev,
  318. "Couldn't update frequency transition information.\n");
  319. devfreq->previous_freq = new_freq;
  320. if (devfreq->suspend_freq)
  321. devfreq->resume_freq = new_freq;
  322. return err;
  323. }
  324. /**
  325. * devfreq_update_target() - Reevaluate the device and configure frequency
  326. * on the final stage.
  327. * @devfreq: the devfreq instance.
  328. * @freq: the new frequency of parent device. This argument
  329. * is only used for devfreq device using passive governor.
  330. *
  331. * Note: Lock devfreq->lock before calling devfreq_update_target. This function
  332. * should be only used by both update_devfreq() and devfreq governors.
  333. */
  334. int devfreq_update_target(struct devfreq *devfreq, unsigned long freq)
  335. {
  336. unsigned long min_freq, max_freq;
  337. int err = 0;
  338. u32 flags = 0;
  339. lockdep_assert_held(&devfreq->lock);
  340. if (!devfreq->governor)
  341. return -EINVAL;
  342. /* Reevaluate the proper frequency */
  343. err = devfreq->governor->get_target_freq(devfreq, &freq);
  344. if (err)
  345. return err;
  346. devfreq_get_freq_range(devfreq, &min_freq, &max_freq);
  347. if (freq < min_freq) {
  348. freq = min_freq;
  349. flags &= ~DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use GLB */
  350. }
  351. if (freq > max_freq) {
  352. freq = max_freq;
  353. flags |= DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use LUB */
  354. }
  355. return devfreq_set_target(devfreq, freq, flags);
  356. }
  357. EXPORT_SYMBOL(devfreq_update_target);
  358. /* Load monitoring helper functions for governors use */
  359. /**
  360. * update_devfreq() - Reevaluate the device and configure frequency.
  361. * @devfreq: the devfreq instance.
  362. *
  363. * Note: Lock devfreq->lock before calling update_devfreq
  364. * This function is exported for governors.
  365. */
  366. int update_devfreq(struct devfreq *devfreq)
  367. {
  368. return devfreq_update_target(devfreq, 0L);
  369. }
  370. EXPORT_SYMBOL(update_devfreq);
  371. /**
  372. * devfreq_monitor() - Periodically poll devfreq objects.
  373. * @work: the work struct used to run devfreq_monitor periodically.
  374. *
  375. */
  376. static void devfreq_monitor(struct work_struct *work)
  377. {
  378. int err;
  379. struct devfreq *devfreq = container_of(work,
  380. struct devfreq, work.work);
  381. mutex_lock(&devfreq->lock);
  382. err = update_devfreq(devfreq);
  383. if (err)
  384. dev_err(&devfreq->dev, "dvfs failed with (%d) error\n", err);
  385. if (devfreq->stop_polling)
  386. goto out;
  387. queue_delayed_work(devfreq_wq, &devfreq->work,
  388. msecs_to_jiffies(devfreq->profile->polling_ms));
  389. out:
  390. mutex_unlock(&devfreq->lock);
  391. trace_devfreq_monitor(devfreq);
  392. }
  393. /**
  394. * devfreq_monitor_start() - Start load monitoring of devfreq instance
  395. * @devfreq: the devfreq instance.
  396. *
  397. * Helper function for starting devfreq device load monitoring. By default,
  398. * deferrable timer is used for load monitoring. But the users can change this
  399. * behavior using the "timer" type in devfreq_dev_profile. This function will be
  400. * called by devfreq governor in response to the DEVFREQ_GOV_START event
  401. * generated while adding a device to the devfreq framework.
  402. */
  403. void devfreq_monitor_start(struct devfreq *devfreq)
  404. {
  405. if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN))
  406. return;
  407. mutex_lock(&devfreq->lock);
  408. if (delayed_work_pending(&devfreq->work))
  409. goto out;
  410. switch (devfreq->profile->timer) {
  411. case DEVFREQ_TIMER_DEFERRABLE:
  412. INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor);
  413. break;
  414. case DEVFREQ_TIMER_DELAYED:
  415. INIT_DELAYED_WORK(&devfreq->work, devfreq_monitor);
  416. break;
  417. default:
  418. goto out;
  419. }
  420. if (devfreq->profile->polling_ms)
  421. queue_delayed_work(devfreq_wq, &devfreq->work,
  422. msecs_to_jiffies(devfreq->profile->polling_ms));
  423. out:
  424. devfreq->stop_polling = false;
  425. mutex_unlock(&devfreq->lock);
  426. }
  427. EXPORT_SYMBOL(devfreq_monitor_start);
  428. /**
  429. * devfreq_monitor_stop() - Stop load monitoring of a devfreq instance
  430. * @devfreq: the devfreq instance.
  431. *
  432. * Helper function to stop devfreq device load monitoring. Function
  433. * to be called from governor in response to DEVFREQ_GOV_STOP
  434. * event when device is removed from devfreq framework.
  435. */
  436. void devfreq_monitor_stop(struct devfreq *devfreq)
  437. {
  438. if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN))
  439. return;
  440. mutex_lock(&devfreq->lock);
  441. if (devfreq->stop_polling) {
  442. mutex_unlock(&devfreq->lock);
  443. return;
  444. }
  445. devfreq->stop_polling = true;
  446. mutex_unlock(&devfreq->lock);
  447. cancel_delayed_work_sync(&devfreq->work);
  448. }
  449. EXPORT_SYMBOL(devfreq_monitor_stop);
  450. /**
  451. * devfreq_monitor_suspend() - Suspend load monitoring of a devfreq instance
  452. * @devfreq: the devfreq instance.
  453. *
  454. * Helper function to suspend devfreq device load monitoring. Function
  455. * to be called from governor in response to DEVFREQ_GOV_SUSPEND
  456. * event or when polling interval is set to zero.
  457. *
  458. * Note: Though this function is same as devfreq_monitor_stop(),
  459. * intentionally kept separate to provide hooks for collecting
  460. * transition statistics.
  461. */
  462. void devfreq_monitor_suspend(struct devfreq *devfreq)
  463. {
  464. mutex_lock(&devfreq->lock);
  465. if (devfreq->stop_polling) {
  466. mutex_unlock(&devfreq->lock);
  467. return;
  468. }
  469. devfreq_update_status(devfreq, devfreq->previous_freq);
  470. devfreq->stop_polling = true;
  471. mutex_unlock(&devfreq->lock);
  472. if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN))
  473. return;
  474. cancel_delayed_work_sync(&devfreq->work);
  475. }
  476. EXPORT_SYMBOL(devfreq_monitor_suspend);
  477. /**
  478. * devfreq_monitor_resume() - Resume load monitoring of a devfreq instance
  479. * @devfreq: the devfreq instance.
  480. *
  481. * Helper function to resume devfreq device load monitoring. Function
  482. * to be called from governor in response to DEVFREQ_GOV_RESUME
  483. * event or when polling interval is set to non-zero.
  484. */
  485. void devfreq_monitor_resume(struct devfreq *devfreq)
  486. {
  487. unsigned long freq;
  488. mutex_lock(&devfreq->lock);
  489. if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN))
  490. goto out_update;
  491. if (!devfreq->stop_polling)
  492. goto out;
  493. if (!delayed_work_pending(&devfreq->work) &&
  494. devfreq->profile->polling_ms)
  495. queue_delayed_work(devfreq_wq, &devfreq->work,
  496. msecs_to_jiffies(devfreq->profile->polling_ms));
  497. out_update:
  498. devfreq->stats.last_update = get_jiffies_64();
  499. devfreq->stop_polling = false;
  500. if (devfreq->profile->get_cur_freq &&
  501. !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq))
  502. devfreq->previous_freq = freq;
  503. out:
  504. mutex_unlock(&devfreq->lock);
  505. }
  506. EXPORT_SYMBOL(devfreq_monitor_resume);
  507. /**
  508. * devfreq_update_interval() - Update device devfreq monitoring interval
  509. * @devfreq: the devfreq instance.
  510. * @delay: new polling interval to be set.
  511. *
  512. * Helper function to set new load monitoring polling interval. Function
  513. * to be called from governor in response to DEVFREQ_GOV_UPDATE_INTERVAL event.
  514. */
  515. void devfreq_update_interval(struct devfreq *devfreq, unsigned int *delay)
  516. {
  517. unsigned int cur_delay = devfreq->profile->polling_ms;
  518. unsigned int new_delay = *delay;
  519. mutex_lock(&devfreq->lock);
  520. devfreq->profile->polling_ms = new_delay;
  521. if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN))
  522. goto out;
  523. if (devfreq->stop_polling)
  524. goto out;
  525. /* if new delay is zero, stop polling */
  526. if (!new_delay) {
  527. mutex_unlock(&devfreq->lock);
  528. cancel_delayed_work_sync(&devfreq->work);
  529. return;
  530. }
  531. /* if current delay is zero, start polling with new delay */
  532. if (!cur_delay) {
  533. queue_delayed_work(devfreq_wq, &devfreq->work,
  534. msecs_to_jiffies(devfreq->profile->polling_ms));
  535. goto out;
  536. }
  537. /* if current delay is greater than new delay, restart polling */
  538. if (cur_delay > new_delay) {
  539. mutex_unlock(&devfreq->lock);
  540. cancel_delayed_work_sync(&devfreq->work);
  541. mutex_lock(&devfreq->lock);
  542. if (!devfreq->stop_polling)
  543. queue_delayed_work(devfreq_wq, &devfreq->work,
  544. msecs_to_jiffies(devfreq->profile->polling_ms));
  545. }
  546. out:
  547. mutex_unlock(&devfreq->lock);
  548. }
  549. EXPORT_SYMBOL(devfreq_update_interval);
  550. /**
  551. * devfreq_notifier_call() - Notify that the device frequency requirements
  552. * has been changed out of devfreq framework.
  553. * @nb: the notifier_block (supposed to be devfreq->nb)
  554. * @type: not used
  555. * @devp: not used
  556. *
  557. * Called by a notifier that uses devfreq->nb.
  558. */
  559. static int devfreq_notifier_call(struct notifier_block *nb, unsigned long type,
  560. void *devp)
  561. {
  562. struct devfreq *devfreq = container_of(nb, struct devfreq, nb);
  563. int err = -EINVAL;
  564. mutex_lock(&devfreq->lock);
  565. devfreq->scaling_min_freq = find_available_min_freq(devfreq);
  566. if (!devfreq->scaling_min_freq)
  567. goto out;
  568. devfreq->scaling_max_freq = find_available_max_freq(devfreq);
  569. if (!devfreq->scaling_max_freq) {
  570. devfreq->scaling_max_freq = ULONG_MAX;
  571. goto out;
  572. }
  573. err = update_devfreq(devfreq);
  574. out:
  575. mutex_unlock(&devfreq->lock);
  576. if (err)
  577. dev_err(devfreq->dev.parent,
  578. "failed to update frequency from OPP notifier (%d)\n",
  579. err);
  580. return NOTIFY_OK;
  581. }
  582. /**
  583. * qos_notifier_call() - Common handler for QoS constraints.
  584. * @devfreq: the devfreq instance.
  585. */
  586. static int qos_notifier_call(struct devfreq *devfreq)
  587. {
  588. int err;
  589. mutex_lock(&devfreq->lock);
  590. err = update_devfreq(devfreq);
  591. mutex_unlock(&devfreq->lock);
  592. if (err)
  593. dev_err(devfreq->dev.parent,
  594. "failed to update frequency from PM QoS (%d)\n",
  595. err);
  596. return NOTIFY_OK;
  597. }
  598. /**
  599. * qos_min_notifier_call() - Callback for QoS min_freq changes.
  600. * @nb: Should be devfreq->nb_min
  601. * @val: not used
  602. * @ptr: not used
  603. */
  604. static int qos_min_notifier_call(struct notifier_block *nb,
  605. unsigned long val, void *ptr)
  606. {
  607. return qos_notifier_call(container_of(nb, struct devfreq, nb_min));
  608. }
  609. /**
  610. * qos_max_notifier_call() - Callback for QoS max_freq changes.
  611. * @nb: Should be devfreq->nb_max
  612. * @val: not used
  613. * @ptr: not used
  614. */
  615. static int qos_max_notifier_call(struct notifier_block *nb,
  616. unsigned long val, void *ptr)
  617. {
  618. return qos_notifier_call(container_of(nb, struct devfreq, nb_max));
  619. }
  620. /**
  621. * devfreq_dev_release() - Callback for struct device to release the device.
  622. * @dev: the devfreq device
  623. *
  624. * Remove devfreq from the list and release its resources.
  625. */
  626. static void devfreq_dev_release(struct device *dev)
  627. {
  628. struct devfreq *devfreq = to_devfreq(dev);
  629. int err;
  630. mutex_lock(&devfreq_list_lock);
  631. list_del(&devfreq->node);
  632. mutex_unlock(&devfreq_list_lock);
  633. err = dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_max,
  634. DEV_PM_QOS_MAX_FREQUENCY);
  635. if (err && err != -ENOENT)
  636. dev_warn(dev->parent,
  637. "Failed to remove max_freq notifier: %d\n", err);
  638. err = dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_min,
  639. DEV_PM_QOS_MIN_FREQUENCY);
  640. if (err && err != -ENOENT)
  641. dev_warn(dev->parent,
  642. "Failed to remove min_freq notifier: %d\n", err);
  643. if (dev_pm_qos_request_active(&devfreq->user_max_freq_req)) {
  644. err = dev_pm_qos_remove_request(&devfreq->user_max_freq_req);
  645. if (err < 0)
  646. dev_warn(dev->parent,
  647. "Failed to remove max_freq request: %d\n", err);
  648. }
  649. if (dev_pm_qos_request_active(&devfreq->user_min_freq_req)) {
  650. err = dev_pm_qos_remove_request(&devfreq->user_min_freq_req);
  651. if (err < 0)
  652. dev_warn(dev->parent,
  653. "Failed to remove min_freq request: %d\n", err);
  654. }
  655. if (devfreq->profile->exit)
  656. devfreq->profile->exit(devfreq->dev.parent);
  657. if (devfreq->opp_table)
  658. dev_pm_opp_put_opp_table(devfreq->opp_table);
  659. mutex_destroy(&devfreq->lock);
  660. srcu_cleanup_notifier_head(&devfreq->transition_notifier_list);
  661. kfree(devfreq);
  662. }
  663. static void create_sysfs_files(struct devfreq *devfreq,
  664. const struct devfreq_governor *gov);
  665. static void remove_sysfs_files(struct devfreq *devfreq,
  666. const struct devfreq_governor *gov);
  667. /**
  668. * devfreq_add_device() - Add devfreq feature to the device
  669. * @dev: the device to add devfreq feature.
  670. * @profile: device-specific profile to run devfreq.
  671. * @governor_name: name of the policy to choose frequency.
  672. * @data: devfreq driver pass to governors, governor should not change it.
  673. */
  674. struct devfreq *devfreq_add_device(struct device *dev,
  675. struct devfreq_dev_profile *profile,
  676. const char *governor_name,
  677. void *data)
  678. {
  679. struct devfreq *devfreq;
  680. struct devfreq_governor *governor;
  681. int err = 0;
  682. if (!dev || !profile || !governor_name) {
  683. dev_err(dev, "%s: Invalid parameters.\n", __func__);
  684. return ERR_PTR(-EINVAL);
  685. }
  686. mutex_lock(&devfreq_list_lock);
  687. devfreq = find_device_devfreq(dev);
  688. mutex_unlock(&devfreq_list_lock);
  689. if (!IS_ERR(devfreq)) {
  690. dev_err(dev, "%s: devfreq device already exists!\n",
  691. __func__);
  692. err = -EINVAL;
  693. goto err_out;
  694. }
  695. devfreq = kzalloc_obj(struct devfreq);
  696. if (!devfreq) {
  697. err = -ENOMEM;
  698. goto err_out;
  699. }
  700. mutex_init(&devfreq->lock);
  701. mutex_lock(&devfreq->lock);
  702. devfreq->dev.parent = dev;
  703. devfreq->dev.class = devfreq_class;
  704. devfreq->dev.groups = profile->dev_groups;
  705. devfreq->dev.release = devfreq_dev_release;
  706. INIT_LIST_HEAD(&devfreq->node);
  707. devfreq->profile = profile;
  708. devfreq->previous_freq = profile->initial_freq;
  709. devfreq->last_status.current_frequency = profile->initial_freq;
  710. devfreq->data = data;
  711. devfreq->nb.notifier_call = devfreq_notifier_call;
  712. if (devfreq->profile->timer < 0
  713. || devfreq->profile->timer >= DEVFREQ_TIMER_NUM) {
  714. mutex_unlock(&devfreq->lock);
  715. err = -EINVAL;
  716. goto err_dev;
  717. }
  718. if (!devfreq->profile->max_state || !devfreq->profile->freq_table) {
  719. mutex_unlock(&devfreq->lock);
  720. err = set_freq_table(devfreq);
  721. if (err < 0)
  722. goto err_dev;
  723. mutex_lock(&devfreq->lock);
  724. } else {
  725. devfreq->freq_table = devfreq->profile->freq_table;
  726. devfreq->max_state = devfreq->profile->max_state;
  727. }
  728. devfreq->scaling_min_freq = find_available_min_freq(devfreq);
  729. if (!devfreq->scaling_min_freq) {
  730. mutex_unlock(&devfreq->lock);
  731. err = -EINVAL;
  732. goto err_dev;
  733. }
  734. devfreq->scaling_max_freq = find_available_max_freq(devfreq);
  735. if (!devfreq->scaling_max_freq) {
  736. mutex_unlock(&devfreq->lock);
  737. err = -EINVAL;
  738. goto err_dev;
  739. }
  740. devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev);
  741. devfreq->opp_table = dev_pm_opp_get_opp_table(dev);
  742. if (IS_ERR(devfreq->opp_table))
  743. devfreq->opp_table = NULL;
  744. atomic_set(&devfreq->suspend_count, 0);
  745. dev_set_name(&devfreq->dev, "%s", dev_name(dev));
  746. err = device_register(&devfreq->dev);
  747. if (err) {
  748. mutex_unlock(&devfreq->lock);
  749. put_device(&devfreq->dev);
  750. goto err_out;
  751. }
  752. devfreq->stats.trans_table = devm_kzalloc(&devfreq->dev,
  753. array3_size(sizeof(unsigned int),
  754. devfreq->max_state,
  755. devfreq->max_state),
  756. GFP_KERNEL);
  757. if (!devfreq->stats.trans_table) {
  758. mutex_unlock(&devfreq->lock);
  759. err = -ENOMEM;
  760. goto err_devfreq;
  761. }
  762. devfreq->stats.time_in_state = devm_kcalloc(&devfreq->dev,
  763. devfreq->max_state,
  764. sizeof(*devfreq->stats.time_in_state),
  765. GFP_KERNEL);
  766. if (!devfreq->stats.time_in_state) {
  767. mutex_unlock(&devfreq->lock);
  768. err = -ENOMEM;
  769. goto err_devfreq;
  770. }
  771. devfreq->stats.total_trans = 0;
  772. devfreq->stats.last_update = get_jiffies_64();
  773. srcu_init_notifier_head(&devfreq->transition_notifier_list);
  774. mutex_unlock(&devfreq->lock);
  775. err = dev_pm_qos_add_request(dev, &devfreq->user_min_freq_req,
  776. DEV_PM_QOS_MIN_FREQUENCY, 0);
  777. if (err < 0)
  778. goto err_devfreq;
  779. err = dev_pm_qos_add_request(dev, &devfreq->user_max_freq_req,
  780. DEV_PM_QOS_MAX_FREQUENCY,
  781. PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE);
  782. if (err < 0)
  783. goto err_devfreq;
  784. devfreq->nb_min.notifier_call = qos_min_notifier_call;
  785. err = dev_pm_qos_add_notifier(dev, &devfreq->nb_min,
  786. DEV_PM_QOS_MIN_FREQUENCY);
  787. if (err)
  788. goto err_devfreq;
  789. devfreq->nb_max.notifier_call = qos_max_notifier_call;
  790. err = dev_pm_qos_add_notifier(dev, &devfreq->nb_max,
  791. DEV_PM_QOS_MAX_FREQUENCY);
  792. if (err)
  793. goto err_devfreq;
  794. mutex_lock(&devfreq_list_lock);
  795. governor = try_then_request_governor(governor_name);
  796. if (IS_ERR(governor)) {
  797. dev_err(dev, "%s: Unable to find governor for the device\n",
  798. __func__);
  799. err = PTR_ERR(governor);
  800. goto err_init;
  801. }
  802. devfreq->governor = governor;
  803. err = devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_START,
  804. NULL);
  805. if (err) {
  806. dev_err_probe(dev, err,
  807. "%s: Unable to start governor for the device\n",
  808. __func__);
  809. goto err_init;
  810. }
  811. create_sysfs_files(devfreq, devfreq->governor);
  812. list_add(&devfreq->node, &devfreq_list);
  813. mutex_unlock(&devfreq_list_lock);
  814. if (devfreq->profile->is_cooling_device) {
  815. devfreq->cdev = devfreq_cooling_em_register(devfreq, NULL);
  816. if (IS_ERR(devfreq->cdev))
  817. devfreq->cdev = NULL;
  818. }
  819. return devfreq;
  820. err_init:
  821. mutex_unlock(&devfreq_list_lock);
  822. err_devfreq:
  823. devfreq_remove_device(devfreq);
  824. devfreq = NULL;
  825. err_dev:
  826. kfree(devfreq);
  827. err_out:
  828. return ERR_PTR(err);
  829. }
  830. EXPORT_SYMBOL(devfreq_add_device);
  831. /**
  832. * devfreq_remove_device() - Remove devfreq feature from a device.
  833. * @devfreq: the devfreq instance to be removed
  834. *
  835. * The opposite of devfreq_add_device().
  836. */
  837. int devfreq_remove_device(struct devfreq *devfreq)
  838. {
  839. if (!devfreq)
  840. return -EINVAL;
  841. devfreq_cooling_unregister(devfreq->cdev);
  842. if (devfreq->governor) {
  843. devfreq->governor->event_handler(devfreq,
  844. DEVFREQ_GOV_STOP, NULL);
  845. remove_sysfs_files(devfreq, devfreq->governor);
  846. }
  847. device_unregister(&devfreq->dev);
  848. return 0;
  849. }
  850. EXPORT_SYMBOL(devfreq_remove_device);
  851. static int devm_devfreq_dev_match(struct device *dev, void *res, void *data)
  852. {
  853. struct devfreq **r = res;
  854. if (WARN_ON(!r || !*r))
  855. return 0;
  856. return *r == data;
  857. }
  858. static void devm_devfreq_dev_release(struct device *dev, void *res)
  859. {
  860. devfreq_remove_device(*(struct devfreq **)res);
  861. }
  862. /**
  863. * devm_devfreq_add_device() - Resource-managed devfreq_add_device()
  864. * @dev: the device to add devfreq feature.
  865. * @profile: device-specific profile to run devfreq.
  866. * @governor_name: name of the policy to choose frequency.
  867. * @data: devfreq driver pass to governors, governor should not change it.
  868. *
  869. * This function manages automatically the memory of devfreq device using device
  870. * resource management and simplify the free operation for memory of devfreq
  871. * device.
  872. */
  873. struct devfreq *devm_devfreq_add_device(struct device *dev,
  874. struct devfreq_dev_profile *profile,
  875. const char *governor_name,
  876. void *data)
  877. {
  878. struct devfreq **ptr, *devfreq;
  879. ptr = devres_alloc(devm_devfreq_dev_release, sizeof(*ptr), GFP_KERNEL);
  880. if (!ptr)
  881. return ERR_PTR(-ENOMEM);
  882. devfreq = devfreq_add_device(dev, profile, governor_name, data);
  883. if (IS_ERR(devfreq)) {
  884. devres_free(ptr);
  885. return devfreq;
  886. }
  887. *ptr = devfreq;
  888. devres_add(dev, ptr);
  889. return devfreq;
  890. }
  891. EXPORT_SYMBOL(devm_devfreq_add_device);
  892. #ifdef CONFIG_OF
  893. /*
  894. * devfreq_get_devfreq_by_node - Get the devfreq device from devicetree
  895. * @node - pointer to device_node
  896. *
  897. * return the instance of devfreq device
  898. */
  899. struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node)
  900. {
  901. struct devfreq *devfreq;
  902. if (!node)
  903. return ERR_PTR(-EINVAL);
  904. mutex_lock(&devfreq_list_lock);
  905. list_for_each_entry(devfreq, &devfreq_list, node) {
  906. if (devfreq->dev.parent
  907. && device_match_of_node(devfreq->dev.parent, node)) {
  908. mutex_unlock(&devfreq_list_lock);
  909. return devfreq;
  910. }
  911. }
  912. mutex_unlock(&devfreq_list_lock);
  913. return ERR_PTR(-ENODEV);
  914. }
  915. /*
  916. * devfreq_get_devfreq_by_phandle - Get the devfreq device from devicetree
  917. * @dev - instance to the given device
  918. * @phandle_name - name of property holding a phandle value
  919. * @index - index into list of devfreq
  920. *
  921. * return the instance of devfreq device
  922. */
  923. struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev,
  924. const char *phandle_name, int index)
  925. {
  926. struct device_node *node;
  927. struct devfreq *devfreq;
  928. if (!dev || !phandle_name)
  929. return ERR_PTR(-EINVAL);
  930. if (!dev->of_node)
  931. return ERR_PTR(-EINVAL);
  932. node = of_parse_phandle(dev->of_node, phandle_name, index);
  933. if (!node)
  934. return ERR_PTR(-ENODEV);
  935. devfreq = devfreq_get_devfreq_by_node(node);
  936. of_node_put(node);
  937. return devfreq;
  938. }
  939. #else
  940. struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node)
  941. {
  942. return ERR_PTR(-ENODEV);
  943. }
  944. struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev,
  945. const char *phandle_name, int index)
  946. {
  947. return ERR_PTR(-ENODEV);
  948. }
  949. #endif /* CONFIG_OF */
  950. EXPORT_SYMBOL_GPL(devfreq_get_devfreq_by_node);
  951. EXPORT_SYMBOL_GPL(devfreq_get_devfreq_by_phandle);
  952. /**
  953. * devm_devfreq_remove_device() - Resource-managed devfreq_remove_device()
  954. * @dev: the device from which to remove devfreq feature.
  955. * @devfreq: the devfreq instance to be removed
  956. */
  957. void devm_devfreq_remove_device(struct device *dev, struct devfreq *devfreq)
  958. {
  959. WARN_ON(devres_release(dev, devm_devfreq_dev_release,
  960. devm_devfreq_dev_match, devfreq));
  961. }
  962. EXPORT_SYMBOL(devm_devfreq_remove_device);
  963. /**
  964. * devfreq_suspend_device() - Suspend devfreq of a device.
  965. * @devfreq: the devfreq instance to be suspended
  966. *
  967. * This function is intended to be called by the pm callbacks
  968. * (e.g., runtime_suspend, suspend) of the device driver that
  969. * holds the devfreq.
  970. */
  971. int devfreq_suspend_device(struct devfreq *devfreq)
  972. {
  973. int ret;
  974. if (!devfreq)
  975. return -EINVAL;
  976. if (atomic_inc_return(&devfreq->suspend_count) > 1)
  977. return 0;
  978. if (devfreq->governor) {
  979. ret = devfreq->governor->event_handler(devfreq,
  980. DEVFREQ_GOV_SUSPEND, NULL);
  981. if (ret)
  982. return ret;
  983. }
  984. if (devfreq->suspend_freq) {
  985. mutex_lock(&devfreq->lock);
  986. ret = devfreq_set_target(devfreq, devfreq->suspend_freq, 0);
  987. mutex_unlock(&devfreq->lock);
  988. if (ret)
  989. return ret;
  990. }
  991. return 0;
  992. }
  993. EXPORT_SYMBOL(devfreq_suspend_device);
  994. /**
  995. * devfreq_resume_device() - Resume devfreq of a device.
  996. * @devfreq: the devfreq instance to be resumed
  997. *
  998. * This function is intended to be called by the pm callbacks
  999. * (e.g., runtime_resume, resume) of the device driver that
  1000. * holds the devfreq.
  1001. */
  1002. int devfreq_resume_device(struct devfreq *devfreq)
  1003. {
  1004. int ret;
  1005. if (!devfreq)
  1006. return -EINVAL;
  1007. if (atomic_dec_return(&devfreq->suspend_count) >= 1)
  1008. return 0;
  1009. if (devfreq->resume_freq) {
  1010. mutex_lock(&devfreq->lock);
  1011. ret = devfreq_set_target(devfreq, devfreq->resume_freq, 0);
  1012. mutex_unlock(&devfreq->lock);
  1013. if (ret)
  1014. return ret;
  1015. }
  1016. if (devfreq->governor) {
  1017. ret = devfreq->governor->event_handler(devfreq,
  1018. DEVFREQ_GOV_RESUME, NULL);
  1019. if (ret)
  1020. return ret;
  1021. }
  1022. return 0;
  1023. }
  1024. EXPORT_SYMBOL(devfreq_resume_device);
  1025. /**
  1026. * devfreq_suspend() - Suspend devfreq governors and devices
  1027. *
  1028. * Called during system wide Suspend/Hibernate cycles for suspending governors
  1029. * and devices preserving the state for resume. On some platforms the devfreq
  1030. * device must have precise state (frequency) after resume in order to provide
  1031. * fully operating setup.
  1032. */
  1033. void devfreq_suspend(void)
  1034. {
  1035. struct devfreq *devfreq;
  1036. int ret;
  1037. mutex_lock(&devfreq_list_lock);
  1038. list_for_each_entry(devfreq, &devfreq_list, node) {
  1039. ret = devfreq_suspend_device(devfreq);
  1040. if (ret)
  1041. dev_err(&devfreq->dev,
  1042. "failed to suspend devfreq device\n");
  1043. }
  1044. mutex_unlock(&devfreq_list_lock);
  1045. }
  1046. /**
  1047. * devfreq_resume() - Resume devfreq governors and devices
  1048. *
  1049. * Called during system wide Suspend/Hibernate cycle for resuming governors and
  1050. * devices that are suspended with devfreq_suspend().
  1051. */
  1052. void devfreq_resume(void)
  1053. {
  1054. struct devfreq *devfreq;
  1055. int ret;
  1056. mutex_lock(&devfreq_list_lock);
  1057. list_for_each_entry(devfreq, &devfreq_list, node) {
  1058. ret = devfreq_resume_device(devfreq);
  1059. if (ret)
  1060. dev_warn(&devfreq->dev,
  1061. "failed to resume devfreq device\n");
  1062. }
  1063. mutex_unlock(&devfreq_list_lock);
  1064. }
  1065. /**
  1066. * devfreq_add_governor() - Add devfreq governor
  1067. * @governor: the devfreq governor to be added
  1068. */
  1069. int devfreq_add_governor(struct devfreq_governor *governor)
  1070. {
  1071. struct devfreq_governor *g;
  1072. struct devfreq *devfreq;
  1073. int err = 0;
  1074. if (!governor) {
  1075. pr_err("%s: Invalid parameters.\n", __func__);
  1076. return -EINVAL;
  1077. }
  1078. mutex_lock(&devfreq_list_lock);
  1079. g = find_devfreq_governor(governor->name);
  1080. if (!IS_ERR(g)) {
  1081. pr_err("%s: governor %s already registered\n", __func__,
  1082. g->name);
  1083. err = -EINVAL;
  1084. goto err_out;
  1085. }
  1086. list_add(&governor->node, &devfreq_governor_list);
  1087. list_for_each_entry(devfreq, &devfreq_list, node) {
  1088. int ret = 0;
  1089. struct device *dev = devfreq->dev.parent;
  1090. if (!strncmp(devfreq->governor->name, governor->name,
  1091. DEVFREQ_NAME_LEN)) {
  1092. /* The following should never occur */
  1093. if (devfreq->governor) {
  1094. dev_warn(dev,
  1095. "%s: Governor %s already present\n",
  1096. __func__, devfreq->governor->name);
  1097. ret = devfreq->governor->event_handler(devfreq,
  1098. DEVFREQ_GOV_STOP, NULL);
  1099. if (ret) {
  1100. dev_warn(dev,
  1101. "%s: Governor %s stop = %d\n",
  1102. __func__,
  1103. devfreq->governor->name, ret);
  1104. }
  1105. /* Fall through */
  1106. }
  1107. devfreq->governor = governor;
  1108. ret = devfreq->governor->event_handler(devfreq,
  1109. DEVFREQ_GOV_START, NULL);
  1110. if (ret) {
  1111. dev_warn(dev, "%s: Governor %s start=%d\n",
  1112. __func__, devfreq->governor->name,
  1113. ret);
  1114. }
  1115. }
  1116. }
  1117. err_out:
  1118. mutex_unlock(&devfreq_list_lock);
  1119. return err;
  1120. }
  1121. EXPORT_SYMBOL(devfreq_add_governor);
  1122. static void devm_devfreq_remove_governor(void *governor)
  1123. {
  1124. WARN_ON(devfreq_remove_governor(governor));
  1125. }
  1126. /**
  1127. * devm_devfreq_add_governor() - Add devfreq governor
  1128. * @dev: device which adds devfreq governor
  1129. * @governor: the devfreq governor to be added
  1130. *
  1131. * This is a resource-managed variant of devfreq_add_governor().
  1132. */
  1133. int devm_devfreq_add_governor(struct device *dev,
  1134. struct devfreq_governor *governor)
  1135. {
  1136. int err;
  1137. err = devfreq_add_governor(governor);
  1138. if (err)
  1139. return err;
  1140. return devm_add_action_or_reset(dev, devm_devfreq_remove_governor,
  1141. governor);
  1142. }
  1143. EXPORT_SYMBOL(devm_devfreq_add_governor);
  1144. /**
  1145. * devfreq_remove_governor() - Remove devfreq feature from a device.
  1146. * @governor: the devfreq governor to be removed
  1147. */
  1148. int devfreq_remove_governor(struct devfreq_governor *governor)
  1149. {
  1150. struct devfreq_governor *g;
  1151. struct devfreq *devfreq;
  1152. int err = 0;
  1153. if (!governor) {
  1154. pr_err("%s: Invalid parameters.\n", __func__);
  1155. return -EINVAL;
  1156. }
  1157. mutex_lock(&devfreq_list_lock);
  1158. g = find_devfreq_governor(governor->name);
  1159. if (IS_ERR(g)) {
  1160. pr_err("%s: governor %s not registered\n", __func__,
  1161. governor->name);
  1162. err = PTR_ERR(g);
  1163. goto err_out;
  1164. }
  1165. list_for_each_entry(devfreq, &devfreq_list, node) {
  1166. int ret;
  1167. struct device *dev = devfreq->dev.parent;
  1168. if (!devfreq->governor)
  1169. continue;
  1170. if (!strncmp(devfreq->governor->name, governor->name,
  1171. DEVFREQ_NAME_LEN)) {
  1172. ret = devfreq->governor->event_handler(devfreq,
  1173. DEVFREQ_GOV_STOP, NULL);
  1174. if (ret) {
  1175. dev_warn(dev, "%s: Governor %s stop=%d\n",
  1176. __func__, devfreq->governor->name,
  1177. ret);
  1178. }
  1179. devfreq->governor = NULL;
  1180. }
  1181. }
  1182. list_del(&governor->node);
  1183. err_out:
  1184. mutex_unlock(&devfreq_list_lock);
  1185. return err;
  1186. }
  1187. EXPORT_SYMBOL(devfreq_remove_governor);
  1188. static ssize_t name_show(struct device *dev,
  1189. struct device_attribute *attr, char *buf)
  1190. {
  1191. struct devfreq *df = to_devfreq(dev);
  1192. return sprintf(buf, "%s\n", dev_name(df->dev.parent));
  1193. }
  1194. static DEVICE_ATTR_RO(name);
  1195. static ssize_t governor_show(struct device *dev,
  1196. struct device_attribute *attr, char *buf)
  1197. {
  1198. struct devfreq *df = to_devfreq(dev);
  1199. if (!df->governor)
  1200. return -EINVAL;
  1201. return sprintf(buf, "%s\n", df->governor->name);
  1202. }
  1203. static ssize_t governor_store(struct device *dev, struct device_attribute *attr,
  1204. const char *buf, size_t count)
  1205. {
  1206. struct devfreq *df = to_devfreq(dev);
  1207. int ret;
  1208. char str_governor[DEVFREQ_NAME_LEN + 1];
  1209. const struct devfreq_governor *governor, *prev_governor;
  1210. if (!df->governor)
  1211. return -EINVAL;
  1212. ret = sscanf(buf, "%" __stringify(DEVFREQ_NAME_LEN) "s", str_governor);
  1213. if (ret != 1)
  1214. return -EINVAL;
  1215. mutex_lock(&devfreq_list_lock);
  1216. governor = try_then_request_governor(str_governor);
  1217. if (IS_ERR(governor)) {
  1218. ret = PTR_ERR(governor);
  1219. goto out;
  1220. }
  1221. if (df->governor == governor) {
  1222. ret = 0;
  1223. goto out;
  1224. } else if (IS_SUPPORTED_FLAG(df->governor->flags, IMMUTABLE)
  1225. || IS_SUPPORTED_FLAG(governor->flags, IMMUTABLE)) {
  1226. ret = -EINVAL;
  1227. goto out;
  1228. }
  1229. /*
  1230. * Stop the current governor and remove the specific sysfs files
  1231. * which depend on current governor.
  1232. */
  1233. ret = df->governor->event_handler(df, DEVFREQ_GOV_STOP, NULL);
  1234. if (ret) {
  1235. dev_warn(dev, "%s: Governor %s not stopped(%d)\n",
  1236. __func__, df->governor->name, ret);
  1237. goto out;
  1238. }
  1239. remove_sysfs_files(df, df->governor);
  1240. /*
  1241. * Start the new governor and create the specific sysfs files
  1242. * which depend on the new governor.
  1243. */
  1244. prev_governor = df->governor;
  1245. df->governor = governor;
  1246. ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL);
  1247. if (ret) {
  1248. dev_warn(dev, "%s: Governor %s not started(%d)\n",
  1249. __func__, df->governor->name, ret);
  1250. /* Restore previous governor */
  1251. df->governor = prev_governor;
  1252. ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL);
  1253. if (ret) {
  1254. dev_err(dev,
  1255. "%s: reverting to Governor %s failed (%d)\n",
  1256. __func__, prev_governor->name, ret);
  1257. df->governor = NULL;
  1258. goto out;
  1259. }
  1260. }
  1261. /*
  1262. * Create the sysfs files for the new governor. But if failed to start
  1263. * the new governor, restore the sysfs files of previous governor.
  1264. */
  1265. create_sysfs_files(df, df->governor);
  1266. out:
  1267. mutex_unlock(&devfreq_list_lock);
  1268. if (!ret)
  1269. ret = count;
  1270. return ret;
  1271. }
  1272. static DEVICE_ATTR_RW(governor);
  1273. static ssize_t available_governors_show(struct device *d,
  1274. struct device_attribute *attr,
  1275. char *buf)
  1276. {
  1277. struct devfreq *df = to_devfreq(d);
  1278. ssize_t count = 0;
  1279. if (!df->governor)
  1280. return -EINVAL;
  1281. mutex_lock(&devfreq_list_lock);
  1282. /*
  1283. * The devfreq with immutable governor (e.g., passive) shows
  1284. * only own governor.
  1285. */
  1286. if (IS_SUPPORTED_FLAG(df->governor->flags, IMMUTABLE)) {
  1287. count = scnprintf(&buf[count], DEVFREQ_NAME_LEN,
  1288. "%s ", df->governor->name);
  1289. /*
  1290. * The devfreq device shows the registered governor except for
  1291. * immutable governors such as passive governor .
  1292. */
  1293. } else {
  1294. struct devfreq_governor *governor;
  1295. list_for_each_entry(governor, &devfreq_governor_list, node) {
  1296. if (IS_SUPPORTED_FLAG(governor->flags, IMMUTABLE))
  1297. continue;
  1298. count += scnprintf(&buf[count], (PAGE_SIZE - count - 2),
  1299. "%s ", governor->name);
  1300. }
  1301. }
  1302. mutex_unlock(&devfreq_list_lock);
  1303. /* Truncate the trailing space */
  1304. if (count)
  1305. count--;
  1306. count += sprintf(&buf[count], "\n");
  1307. return count;
  1308. }
  1309. static DEVICE_ATTR_RO(available_governors);
  1310. static ssize_t cur_freq_show(struct device *dev, struct device_attribute *attr,
  1311. char *buf)
  1312. {
  1313. unsigned long freq;
  1314. struct devfreq *df = to_devfreq(dev);
  1315. if (!df->profile)
  1316. return -EINVAL;
  1317. if (df->profile->get_cur_freq &&
  1318. !df->profile->get_cur_freq(df->dev.parent, &freq))
  1319. return sprintf(buf, "%lu\n", freq);
  1320. return sprintf(buf, "%lu\n", df->previous_freq);
  1321. }
  1322. static DEVICE_ATTR_RO(cur_freq);
  1323. static ssize_t target_freq_show(struct device *dev,
  1324. struct device_attribute *attr, char *buf)
  1325. {
  1326. struct devfreq *df = to_devfreq(dev);
  1327. return sprintf(buf, "%lu\n", df->previous_freq);
  1328. }
  1329. static DEVICE_ATTR_RO(target_freq);
  1330. static ssize_t min_freq_store(struct device *dev, struct device_attribute *attr,
  1331. const char *buf, size_t count)
  1332. {
  1333. struct devfreq *df = to_devfreq(dev);
  1334. unsigned long value;
  1335. int ret;
  1336. /*
  1337. * Protect against theoretical sysfs writes between
  1338. * device_add and dev_pm_qos_add_request
  1339. */
  1340. if (!dev_pm_qos_request_active(&df->user_min_freq_req))
  1341. return -EAGAIN;
  1342. ret = sscanf(buf, "%lu", &value);
  1343. if (ret != 1)
  1344. return -EINVAL;
  1345. /* Round down to kHz for PM QoS */
  1346. ret = dev_pm_qos_update_request(&df->user_min_freq_req,
  1347. value / HZ_PER_KHZ);
  1348. if (ret < 0)
  1349. return ret;
  1350. return count;
  1351. }
  1352. static ssize_t min_freq_show(struct device *dev, struct device_attribute *attr,
  1353. char *buf)
  1354. {
  1355. struct devfreq *df = to_devfreq(dev);
  1356. unsigned long min_freq, max_freq;
  1357. mutex_lock(&df->lock);
  1358. devfreq_get_freq_range(df, &min_freq, &max_freq);
  1359. mutex_unlock(&df->lock);
  1360. return sprintf(buf, "%lu\n", min_freq);
  1361. }
  1362. static DEVICE_ATTR_RW(min_freq);
  1363. static ssize_t max_freq_store(struct device *dev, struct device_attribute *attr,
  1364. const char *buf, size_t count)
  1365. {
  1366. struct devfreq *df = to_devfreq(dev);
  1367. unsigned long value;
  1368. int ret;
  1369. /*
  1370. * Protect against theoretical sysfs writes between
  1371. * device_add and dev_pm_qos_add_request
  1372. */
  1373. if (!dev_pm_qos_request_active(&df->user_max_freq_req))
  1374. return -EINVAL;
  1375. ret = sscanf(buf, "%lu", &value);
  1376. if (ret != 1)
  1377. return -EINVAL;
  1378. /*
  1379. * PM QoS frequencies are in kHz so we need to convert. Convert by
  1380. * rounding upwards so that the acceptable interval never shrinks.
  1381. *
  1382. * For example if the user writes "666666666" to sysfs this value will
  1383. * be converted to 666667 kHz and back to 666667000 Hz before an OPP
  1384. * lookup, this ensures that an OPP of 666666666Hz is still accepted.
  1385. *
  1386. * A value of zero means "no limit".
  1387. */
  1388. if (value)
  1389. value = DIV_ROUND_UP(value, HZ_PER_KHZ);
  1390. else
  1391. value = PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE;
  1392. ret = dev_pm_qos_update_request(&df->user_max_freq_req, value);
  1393. if (ret < 0)
  1394. return ret;
  1395. return count;
  1396. }
  1397. static ssize_t max_freq_show(struct device *dev, struct device_attribute *attr,
  1398. char *buf)
  1399. {
  1400. struct devfreq *df = to_devfreq(dev);
  1401. unsigned long min_freq, max_freq;
  1402. mutex_lock(&df->lock);
  1403. devfreq_get_freq_range(df, &min_freq, &max_freq);
  1404. mutex_unlock(&df->lock);
  1405. return sprintf(buf, "%lu\n", max_freq);
  1406. }
  1407. static DEVICE_ATTR_RW(max_freq);
  1408. static ssize_t available_frequencies_show(struct device *d,
  1409. struct device_attribute *attr,
  1410. char *buf)
  1411. {
  1412. struct devfreq *df = to_devfreq(d);
  1413. ssize_t count = 0;
  1414. int i;
  1415. if (!df->profile)
  1416. return -EINVAL;
  1417. mutex_lock(&df->lock);
  1418. for (i = 0; i < df->max_state; i++)
  1419. count += scnprintf(&buf[count], (PAGE_SIZE - count - 2),
  1420. "%lu ", df->freq_table[i]);
  1421. mutex_unlock(&df->lock);
  1422. /* Truncate the trailing space */
  1423. if (count)
  1424. count--;
  1425. count += sprintf(&buf[count], "\n");
  1426. return count;
  1427. }
  1428. static DEVICE_ATTR_RO(available_frequencies);
  1429. static ssize_t trans_stat_show(struct device *dev,
  1430. struct device_attribute *attr, char *buf)
  1431. {
  1432. struct devfreq *df = to_devfreq(dev);
  1433. ssize_t len = 0;
  1434. int i, j;
  1435. unsigned int max_state;
  1436. if (!df->profile)
  1437. return -EINVAL;
  1438. max_state = df->max_state;
  1439. if (max_state == 0)
  1440. return sysfs_emit(buf, "Not Supported.\n");
  1441. mutex_lock(&df->lock);
  1442. if (!df->stop_polling &&
  1443. devfreq_update_status(df, df->previous_freq)) {
  1444. mutex_unlock(&df->lock);
  1445. return 0;
  1446. }
  1447. mutex_unlock(&df->lock);
  1448. len += sysfs_emit_at(buf, len, " From : To\n");
  1449. len += sysfs_emit_at(buf, len, " :");
  1450. for (i = 0; i < max_state; i++) {
  1451. if (len >= PAGE_SIZE - 1)
  1452. break;
  1453. len += sysfs_emit_at(buf, len, "%10lu",
  1454. df->freq_table[i]);
  1455. }
  1456. if (len >= PAGE_SIZE - 1)
  1457. return PAGE_SIZE - 1;
  1458. len += sysfs_emit_at(buf, len, " time(ms)\n");
  1459. for (i = 0; i < max_state; i++) {
  1460. if (len >= PAGE_SIZE - 1)
  1461. break;
  1462. if (df->freq_table[i] == df->previous_freq)
  1463. len += sysfs_emit_at(buf, len, "*");
  1464. else
  1465. len += sysfs_emit_at(buf, len, " ");
  1466. if (len >= PAGE_SIZE - 1)
  1467. break;
  1468. len += sysfs_emit_at(buf, len, "%10lu:", df->freq_table[i]);
  1469. for (j = 0; j < max_state; j++) {
  1470. if (len >= PAGE_SIZE - 1)
  1471. break;
  1472. len += sysfs_emit_at(buf, len, "%10u",
  1473. df->stats.trans_table[(i * max_state) + j]);
  1474. }
  1475. if (len >= PAGE_SIZE - 1)
  1476. break;
  1477. len += sysfs_emit_at(buf, len, "%10llu\n", (u64)
  1478. jiffies64_to_msecs(df->stats.time_in_state[i]));
  1479. }
  1480. if (len < PAGE_SIZE - 1)
  1481. len += sysfs_emit_at(buf, len, "Total transition : %u\n",
  1482. df->stats.total_trans);
  1483. if (len >= PAGE_SIZE - 1) {
  1484. pr_warn_once("devfreq transition table exceeds PAGE_SIZE. Disabling\n");
  1485. return -EFBIG;
  1486. }
  1487. return len;
  1488. }
  1489. static ssize_t trans_stat_store(struct device *dev,
  1490. struct device_attribute *attr,
  1491. const char *buf, size_t count)
  1492. {
  1493. struct devfreq *df = to_devfreq(dev);
  1494. int err, value;
  1495. if (!df->profile)
  1496. return -EINVAL;
  1497. if (df->max_state == 0)
  1498. return count;
  1499. err = kstrtoint(buf, 10, &value);
  1500. if (err || value != 0)
  1501. return -EINVAL;
  1502. mutex_lock(&df->lock);
  1503. memset(df->stats.time_in_state, 0, (df->max_state *
  1504. sizeof(*df->stats.time_in_state)));
  1505. memset(df->stats.trans_table, 0, array3_size(sizeof(unsigned int),
  1506. df->max_state,
  1507. df->max_state));
  1508. df->stats.total_trans = 0;
  1509. df->stats.last_update = get_jiffies_64();
  1510. mutex_unlock(&df->lock);
  1511. return count;
  1512. }
  1513. static DEVICE_ATTR_RW(trans_stat);
  1514. static struct attribute *devfreq_attrs[] = {
  1515. &dev_attr_name.attr,
  1516. &dev_attr_governor.attr,
  1517. &dev_attr_available_governors.attr,
  1518. &dev_attr_cur_freq.attr,
  1519. &dev_attr_available_frequencies.attr,
  1520. &dev_attr_target_freq.attr,
  1521. &dev_attr_min_freq.attr,
  1522. &dev_attr_max_freq.attr,
  1523. &dev_attr_trans_stat.attr,
  1524. NULL,
  1525. };
  1526. ATTRIBUTE_GROUPS(devfreq);
  1527. static ssize_t polling_interval_show(struct device *dev,
  1528. struct device_attribute *attr, char *buf)
  1529. {
  1530. struct devfreq *df = to_devfreq(dev);
  1531. if (!df->profile)
  1532. return -EINVAL;
  1533. return sprintf(buf, "%d\n", df->profile->polling_ms);
  1534. }
  1535. static ssize_t polling_interval_store(struct device *dev,
  1536. struct device_attribute *attr,
  1537. const char *buf, size_t count)
  1538. {
  1539. struct devfreq *df = to_devfreq(dev);
  1540. unsigned int value;
  1541. int ret;
  1542. if (!df->governor)
  1543. return -EINVAL;
  1544. ret = sscanf(buf, "%u", &value);
  1545. if (ret != 1)
  1546. return -EINVAL;
  1547. df->governor->event_handler(df, DEVFREQ_GOV_UPDATE_INTERVAL, &value);
  1548. ret = count;
  1549. return ret;
  1550. }
  1551. static DEVICE_ATTR_RW(polling_interval);
  1552. static ssize_t timer_show(struct device *dev,
  1553. struct device_attribute *attr, char *buf)
  1554. {
  1555. struct devfreq *df = to_devfreq(dev);
  1556. if (!df->profile)
  1557. return -EINVAL;
  1558. return sprintf(buf, "%s\n", timer_name[df->profile->timer]);
  1559. }
  1560. static ssize_t timer_store(struct device *dev, struct device_attribute *attr,
  1561. const char *buf, size_t count)
  1562. {
  1563. struct devfreq *df = to_devfreq(dev);
  1564. char str_timer[DEVFREQ_NAME_LEN + 1];
  1565. int timer = -1;
  1566. int ret = 0, i;
  1567. if (!df->governor || !df->profile)
  1568. return -EINVAL;
  1569. ret = sscanf(buf, "%16s", str_timer);
  1570. if (ret != 1)
  1571. return -EINVAL;
  1572. for (i = 0; i < DEVFREQ_TIMER_NUM; i++) {
  1573. if (!strncmp(timer_name[i], str_timer, DEVFREQ_NAME_LEN)) {
  1574. timer = i;
  1575. break;
  1576. }
  1577. }
  1578. if (timer < 0) {
  1579. ret = -EINVAL;
  1580. goto out;
  1581. }
  1582. if (df->profile->timer == timer) {
  1583. ret = 0;
  1584. goto out;
  1585. }
  1586. mutex_lock(&df->lock);
  1587. df->profile->timer = timer;
  1588. mutex_unlock(&df->lock);
  1589. ret = df->governor->event_handler(df, DEVFREQ_GOV_STOP, NULL);
  1590. if (ret) {
  1591. dev_warn(dev, "%s: Governor %s not stopped(%d)\n",
  1592. __func__, df->governor->name, ret);
  1593. goto out;
  1594. }
  1595. ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL);
  1596. if (ret)
  1597. dev_warn(dev, "%s: Governor %s not started(%d)\n",
  1598. __func__, df->governor->name, ret);
  1599. out:
  1600. return ret ? ret : count;
  1601. }
  1602. static DEVICE_ATTR_RW(timer);
  1603. #define CREATE_SYSFS_FILE(df, name) \
  1604. { \
  1605. int ret; \
  1606. ret = sysfs_create_file(&df->dev.kobj, &dev_attr_##name.attr); \
  1607. if (ret < 0) { \
  1608. dev_warn(&df->dev, \
  1609. "Unable to create attr(%s)\n", "##name"); \
  1610. } \
  1611. } \
  1612. /* Create the specific sysfs files which depend on each governor. */
  1613. static void create_sysfs_files(struct devfreq *devfreq,
  1614. const struct devfreq_governor *gov)
  1615. {
  1616. if (IS_SUPPORTED_ATTR(gov->attrs, POLLING_INTERVAL))
  1617. CREATE_SYSFS_FILE(devfreq, polling_interval);
  1618. if (IS_SUPPORTED_ATTR(gov->attrs, TIMER))
  1619. CREATE_SYSFS_FILE(devfreq, timer);
  1620. }
  1621. /* Remove the specific sysfs files which depend on each governor. */
  1622. static void remove_sysfs_files(struct devfreq *devfreq,
  1623. const struct devfreq_governor *gov)
  1624. {
  1625. if (IS_SUPPORTED_ATTR(gov->attrs, POLLING_INTERVAL))
  1626. sysfs_remove_file(&devfreq->dev.kobj,
  1627. &dev_attr_polling_interval.attr);
  1628. if (IS_SUPPORTED_ATTR(gov->attrs, TIMER))
  1629. sysfs_remove_file(&devfreq->dev.kobj, &dev_attr_timer.attr);
  1630. }
  1631. /**
  1632. * devfreq_summary_show() - Show the summary of the devfreq devices
  1633. * @s: seq_file instance to show the summary of devfreq devices
  1634. * @data: not used
  1635. *
  1636. * Show the summary of the devfreq devices via 'devfreq_summary' debugfs file.
  1637. * It helps that user can know the detailed information of the devfreq devices.
  1638. *
  1639. * Return 0 always because it shows the information without any data change.
  1640. */
  1641. static int devfreq_summary_show(struct seq_file *s, void *data)
  1642. {
  1643. struct devfreq *devfreq;
  1644. struct devfreq *p_devfreq = NULL;
  1645. unsigned long cur_freq, min_freq, max_freq;
  1646. unsigned int polling_ms;
  1647. unsigned int timer;
  1648. seq_printf(s, "%-30s %-30s %-15s %-10s %10s %12s %12s %12s\n",
  1649. "dev",
  1650. "parent_dev",
  1651. "governor",
  1652. "timer",
  1653. "polling_ms",
  1654. "cur_freq_Hz",
  1655. "min_freq_Hz",
  1656. "max_freq_Hz");
  1657. seq_printf(s, "%30s %30s %15s %10s %10s %12s %12s %12s\n",
  1658. "------------------------------",
  1659. "------------------------------",
  1660. "---------------",
  1661. "----------",
  1662. "----------",
  1663. "------------",
  1664. "------------",
  1665. "------------");
  1666. mutex_lock(&devfreq_list_lock);
  1667. list_for_each_entry_reverse(devfreq, &devfreq_list, node) {
  1668. #if IS_ENABLED(CONFIG_DEVFREQ_GOV_PASSIVE)
  1669. if (!strncmp(devfreq->governor->name, DEVFREQ_GOV_PASSIVE,
  1670. DEVFREQ_NAME_LEN)) {
  1671. struct devfreq_passive_data *data = devfreq->data;
  1672. if (data)
  1673. p_devfreq = data->parent;
  1674. } else {
  1675. p_devfreq = NULL;
  1676. }
  1677. #endif
  1678. mutex_lock(&devfreq->lock);
  1679. cur_freq = devfreq->previous_freq;
  1680. devfreq_get_freq_range(devfreq, &min_freq, &max_freq);
  1681. timer = devfreq->profile->timer;
  1682. if (IS_SUPPORTED_ATTR(devfreq->governor->attrs, POLLING_INTERVAL))
  1683. polling_ms = devfreq->profile->polling_ms;
  1684. else
  1685. polling_ms = 0;
  1686. mutex_unlock(&devfreq->lock);
  1687. seq_printf(s,
  1688. "%-30s %-30s %-15s %-10s %10d %12ld %12ld %12ld\n",
  1689. dev_name(&devfreq->dev),
  1690. p_devfreq ? dev_name(&p_devfreq->dev) : "null",
  1691. devfreq->governor->name,
  1692. polling_ms ? timer_name[timer] : "null",
  1693. polling_ms,
  1694. cur_freq,
  1695. min_freq,
  1696. max_freq);
  1697. }
  1698. mutex_unlock(&devfreq_list_lock);
  1699. return 0;
  1700. }
  1701. DEFINE_SHOW_ATTRIBUTE(devfreq_summary);
  1702. static int __init devfreq_init(void)
  1703. {
  1704. devfreq_class = class_create("devfreq");
  1705. if (IS_ERR(devfreq_class)) {
  1706. pr_err("%s: couldn't create class\n", __FILE__);
  1707. return PTR_ERR(devfreq_class);
  1708. }
  1709. devfreq_wq = create_freezable_workqueue("devfreq_wq");
  1710. if (!devfreq_wq) {
  1711. class_destroy(devfreq_class);
  1712. pr_err("%s: couldn't create workqueue\n", __FILE__);
  1713. return -ENOMEM;
  1714. }
  1715. devfreq_class->dev_groups = devfreq_groups;
  1716. devfreq_debugfs = debugfs_create_dir("devfreq", NULL);
  1717. debugfs_create_file("devfreq_summary", 0444,
  1718. devfreq_debugfs, NULL,
  1719. &devfreq_summary_fops);
  1720. return 0;
  1721. }
  1722. subsys_initcall(devfreq_init);
  1723. /*
  1724. * The following are helper functions for devfreq user device drivers with
  1725. * OPP framework.
  1726. */
  1727. /**
  1728. * devfreq_recommended_opp() - Helper function to get proper OPP for the
  1729. * freq value given to target callback.
  1730. * @dev: The devfreq user device. (parent of devfreq)
  1731. * @freq: The frequency given to target function
  1732. * @flags: Flags handed from devfreq framework.
  1733. *
  1734. * The callers are required to call dev_pm_opp_put() for the returned OPP after
  1735. * use.
  1736. */
  1737. struct dev_pm_opp *devfreq_recommended_opp(struct device *dev,
  1738. unsigned long *freq,
  1739. u32 flags)
  1740. {
  1741. struct dev_pm_opp *opp;
  1742. if (flags & DEVFREQ_FLAG_LEAST_UPPER_BOUND) {
  1743. /* The freq is an upper bound. opp should be lower */
  1744. opp = dev_pm_opp_find_freq_floor_indexed(dev, freq, 0);
  1745. /* If not available, use the closest opp */
  1746. if (opp == ERR_PTR(-ERANGE))
  1747. opp = dev_pm_opp_find_freq_ceil_indexed(dev, freq, 0);
  1748. } else {
  1749. /* The freq is an lower bound. opp should be higher */
  1750. opp = dev_pm_opp_find_freq_ceil_indexed(dev, freq, 0);
  1751. /* If not available, use the closest opp */
  1752. if (opp == ERR_PTR(-ERANGE))
  1753. opp = dev_pm_opp_find_freq_floor_indexed(dev, freq, 0);
  1754. }
  1755. return opp;
  1756. }
  1757. EXPORT_SYMBOL(devfreq_recommended_opp);
  1758. /**
  1759. * devfreq_register_opp_notifier() - Helper function to get devfreq notified
  1760. * for any changes in the OPP availability
  1761. * changes
  1762. * @dev: The devfreq user device. (parent of devfreq)
  1763. * @devfreq: The devfreq object.
  1764. */
  1765. int devfreq_register_opp_notifier(struct device *dev, struct devfreq *devfreq)
  1766. {
  1767. return dev_pm_opp_register_notifier(dev, &devfreq->nb);
  1768. }
  1769. EXPORT_SYMBOL(devfreq_register_opp_notifier);
  1770. /**
  1771. * devfreq_unregister_opp_notifier() - Helper function to stop getting devfreq
  1772. * notified for any changes in the OPP
  1773. * availability changes anymore.
  1774. * @dev: The devfreq user device. (parent of devfreq)
  1775. * @devfreq: The devfreq object.
  1776. *
  1777. * At exit() callback of devfreq_dev_profile, this must be included if
  1778. * devfreq_recommended_opp is used.
  1779. */
  1780. int devfreq_unregister_opp_notifier(struct device *dev, struct devfreq *devfreq)
  1781. {
  1782. return dev_pm_opp_unregister_notifier(dev, &devfreq->nb);
  1783. }
  1784. EXPORT_SYMBOL(devfreq_unregister_opp_notifier);
  1785. static void devm_devfreq_opp_release(struct device *dev, void *res)
  1786. {
  1787. devfreq_unregister_opp_notifier(dev, *(struct devfreq **)res);
  1788. }
  1789. /**
  1790. * devm_devfreq_register_opp_notifier() - Resource-managed
  1791. * devfreq_register_opp_notifier()
  1792. * @dev: The devfreq user device. (parent of devfreq)
  1793. * @devfreq: The devfreq object.
  1794. */
  1795. int devm_devfreq_register_opp_notifier(struct device *dev,
  1796. struct devfreq *devfreq)
  1797. {
  1798. struct devfreq **ptr;
  1799. int ret;
  1800. ptr = devres_alloc(devm_devfreq_opp_release, sizeof(*ptr), GFP_KERNEL);
  1801. if (!ptr)
  1802. return -ENOMEM;
  1803. ret = devfreq_register_opp_notifier(dev, devfreq);
  1804. if (ret) {
  1805. devres_free(ptr);
  1806. return ret;
  1807. }
  1808. *ptr = devfreq;
  1809. devres_add(dev, ptr);
  1810. return 0;
  1811. }
  1812. EXPORT_SYMBOL(devm_devfreq_register_opp_notifier);
  1813. /**
  1814. * devm_devfreq_unregister_opp_notifier() - Resource-managed
  1815. * devfreq_unregister_opp_notifier()
  1816. * @dev: The devfreq user device. (parent of devfreq)
  1817. * @devfreq: The devfreq object.
  1818. */
  1819. void devm_devfreq_unregister_opp_notifier(struct device *dev,
  1820. struct devfreq *devfreq)
  1821. {
  1822. WARN_ON(devres_release(dev, devm_devfreq_opp_release,
  1823. devm_devfreq_dev_match, devfreq));
  1824. }
  1825. EXPORT_SYMBOL(devm_devfreq_unregister_opp_notifier);
  1826. /**
  1827. * devfreq_register_notifier() - Register a driver with devfreq
  1828. * @devfreq: The devfreq object.
  1829. * @nb: The notifier block to register.
  1830. * @list: DEVFREQ_TRANSITION_NOTIFIER.
  1831. */
  1832. int devfreq_register_notifier(struct devfreq *devfreq,
  1833. struct notifier_block *nb,
  1834. unsigned int list)
  1835. {
  1836. int ret = 0;
  1837. if (!devfreq)
  1838. return -EINVAL;
  1839. switch (list) {
  1840. case DEVFREQ_TRANSITION_NOTIFIER:
  1841. ret = srcu_notifier_chain_register(
  1842. &devfreq->transition_notifier_list, nb);
  1843. break;
  1844. default:
  1845. ret = -EINVAL;
  1846. }
  1847. return ret;
  1848. }
  1849. EXPORT_SYMBOL(devfreq_register_notifier);
  1850. /*
  1851. * devfreq_unregister_notifier() - Unregister a driver with devfreq
  1852. * @devfreq: The devfreq object.
  1853. * @nb: The notifier block to be unregistered.
  1854. * @list: DEVFREQ_TRANSITION_NOTIFIER.
  1855. */
  1856. int devfreq_unregister_notifier(struct devfreq *devfreq,
  1857. struct notifier_block *nb,
  1858. unsigned int list)
  1859. {
  1860. int ret = 0;
  1861. if (!devfreq)
  1862. return -EINVAL;
  1863. switch (list) {
  1864. case DEVFREQ_TRANSITION_NOTIFIER:
  1865. ret = srcu_notifier_chain_unregister(
  1866. &devfreq->transition_notifier_list, nb);
  1867. break;
  1868. default:
  1869. ret = -EINVAL;
  1870. }
  1871. return ret;
  1872. }
  1873. EXPORT_SYMBOL(devfreq_unregister_notifier);
  1874. struct devfreq_notifier_devres {
  1875. struct devfreq *devfreq;
  1876. struct notifier_block *nb;
  1877. unsigned int list;
  1878. };
  1879. static void devm_devfreq_notifier_release(struct device *dev, void *res)
  1880. {
  1881. struct devfreq_notifier_devres *this = res;
  1882. devfreq_unregister_notifier(this->devfreq, this->nb, this->list);
  1883. }
  1884. /**
  1885. * devm_devfreq_register_notifier()
  1886. * - Resource-managed devfreq_register_notifier()
  1887. * @dev: The devfreq user device. (parent of devfreq)
  1888. * @devfreq: The devfreq object.
  1889. * @nb: The notifier block to be unregistered.
  1890. * @list: DEVFREQ_TRANSITION_NOTIFIER.
  1891. */
  1892. int devm_devfreq_register_notifier(struct device *dev,
  1893. struct devfreq *devfreq,
  1894. struct notifier_block *nb,
  1895. unsigned int list)
  1896. {
  1897. struct devfreq_notifier_devres *ptr;
  1898. int ret;
  1899. ptr = devres_alloc(devm_devfreq_notifier_release, sizeof(*ptr),
  1900. GFP_KERNEL);
  1901. if (!ptr)
  1902. return -ENOMEM;
  1903. ret = devfreq_register_notifier(devfreq, nb, list);
  1904. if (ret) {
  1905. devres_free(ptr);
  1906. return ret;
  1907. }
  1908. ptr->devfreq = devfreq;
  1909. ptr->nb = nb;
  1910. ptr->list = list;
  1911. devres_add(dev, ptr);
  1912. return 0;
  1913. }
  1914. EXPORT_SYMBOL(devm_devfreq_register_notifier);
  1915. /**
  1916. * devm_devfreq_unregister_notifier()
  1917. * - Resource-managed devfreq_unregister_notifier()
  1918. * @dev: The devfreq user device. (parent of devfreq)
  1919. * @devfreq: The devfreq object.
  1920. * @nb: The notifier block to be unregistered.
  1921. * @list: DEVFREQ_TRANSITION_NOTIFIER.
  1922. */
  1923. void devm_devfreq_unregister_notifier(struct device *dev,
  1924. struct devfreq *devfreq,
  1925. struct notifier_block *nb,
  1926. unsigned int list)
  1927. {
  1928. WARN_ON(devres_release(dev, devm_devfreq_notifier_release,
  1929. devm_devfreq_dev_match, devfreq));
  1930. }
  1931. EXPORT_SYMBOL(devm_devfreq_unregister_notifier);