mali_kbase_pm_driver.c 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422
  1. /*
  2. *
  3. * (C) COPYRIGHT 2010-2016 ARM Limited. All rights reserved.
  4. *
  5. * This program is free software and is provided to you under the terms of the
  6. * GNU General Public License version 2 as published by the Free Software
  7. * Foundation, and any use by you of this program is subject to the terms
  8. * of such GNU licence.
  9. *
  10. * A copy of the licence is included with the program, and can also be obtained
  11. * from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  12. * Boston, MA 02110-1301, USA.
  13. *
  14. */
  15. /*
  16. * Base kernel Power Management hardware control
  17. */
  18. #include <mali_kbase.h>
  19. #include <mali_kbase_config_defaults.h>
  20. #include <mali_midg_regmap.h>
  21. #include <mali_kbase_tlstream.h>
  22. #include <mali_kbase_pm.h>
  23. #include <mali_kbase_cache_policy.h>
  24. #include <mali_kbase_config_defaults.h>
  25. #include <mali_kbase_smc.h>
  26. #include <mali_kbase_hwaccess_jm.h>
  27. #include <backend/gpu/mali_kbase_cache_policy_backend.h>
  28. #include <backend/gpu/mali_kbase_device_internal.h>
  29. #include <backend/gpu/mali_kbase_irq_internal.h>
  30. #include <backend/gpu/mali_kbase_pm_internal.h>
  31. #include <linux/of.h>
  32. #define MOCKABLE(function) function
  33. /* Special value to indicate that the JM_CONFIG reg isn't currently used. */
  34. #define KBASE_JM_CONFIG_UNUSED (1<<31)
  35. /**
  36. * enum kbasep_pm_action - Actions that can be performed on a core.
  37. *
  38. * This enumeration is private to the file. Its values are set to allow
  39. * core_type_to_reg() function, which decodes this enumeration, to be simpler
  40. * and more efficient.
  41. *
  42. * @ACTION_PRESENT: The cores that are present
  43. * @ACTION_READY: The cores that are ready
  44. * @ACTION_PWRON: Power on the cores specified
  45. * @ACTION_PWROFF: Power off the cores specified
  46. * @ACTION_PWRTRANS: The cores that are transitioning
  47. * @ACTION_PWRACTIVE: The cores that are active
  48. */
  49. enum kbasep_pm_action {
  50. ACTION_PRESENT = 0,
  51. ACTION_READY = (SHADER_READY_LO - SHADER_PRESENT_LO),
  52. ACTION_PWRON = (SHADER_PWRON_LO - SHADER_PRESENT_LO),
  53. ACTION_PWROFF = (SHADER_PWROFF_LO - SHADER_PRESENT_LO),
  54. ACTION_PWRTRANS = (SHADER_PWRTRANS_LO - SHADER_PRESENT_LO),
  55. ACTION_PWRACTIVE = (SHADER_PWRACTIVE_LO - SHADER_PRESENT_LO)
  56. };
  57. static u64 kbase_pm_get_state(
  58. struct kbase_device *kbdev,
  59. enum kbase_pm_core_type core_type,
  60. enum kbasep_pm_action action);
  61. /**
  62. * core_type_to_reg - Decode a core type and action to a register.
  63. *
  64. * Given a core type (defined by kbase_pm_core_type) and an action (defined
  65. * by kbasep_pm_action) this function will return the register offset that
  66. * will perform the action on the core type. The register returned is the _LO
  67. * register and an offset must be applied to use the _HI register.
  68. *
  69. * @core_type: The type of core
  70. * @action: The type of action
  71. *
  72. * Return: The register offset of the _LO register that performs an action of
  73. * type @action on a core of type @core_type.
  74. */
  75. static u32 core_type_to_reg(enum kbase_pm_core_type core_type,
  76. enum kbasep_pm_action action)
  77. {
  78. return (u32)core_type + (u32)action;
  79. }
  80. #ifdef CONFIG_ARM64
  81. static void mali_cci_flush_l2(struct kbase_device *kbdev)
  82. {
  83. const u32 mask = CLEAN_CACHES_COMPLETED | RESET_COMPLETED;
  84. u32 loops = KBASE_CLEAN_CACHE_MAX_LOOPS;
  85. u32 raw;
  86. /*
  87. * Note that we don't take the cache flush mutex here since
  88. * we expect to be the last user of the L2, all other L2 users
  89. * would have dropped their references, to initiate L2 power
  90. * down, L2 power down being the only valid place for this
  91. * to be called from.
  92. */
  93. kbase_reg_write(kbdev,
  94. GPU_CONTROL_REG(GPU_COMMAND),
  95. GPU_COMMAND_CLEAN_INV_CACHES,
  96. NULL);
  97. raw = kbase_reg_read(kbdev,
  98. GPU_CONTROL_REG(GPU_IRQ_RAWSTAT),
  99. NULL);
  100. /* Wait for cache flush to complete before continuing, exit on
  101. * gpu resets or loop expiry. */
  102. while (((raw & mask) == 0) && --loops) {
  103. raw = kbase_reg_read(kbdev,
  104. GPU_CONTROL_REG(GPU_IRQ_RAWSTAT),
  105. NULL);
  106. }
  107. }
  108. #endif // ifdef CONFIG_ARM64
  109. /**
  110. * kbase_pm_invoke - Invokes an action on a core set
  111. *
  112. * This function performs the action given by @action on a set of cores of a
  113. * type given by @core_type. It is a static function used by
  114. * kbase_pm_transition_core_type()
  115. *
  116. * @kbdev: The kbase device structure of the device
  117. * @core_type: The type of core that the action should be performed on
  118. * @cores: A bit mask of cores to perform the action on (low 32 bits)
  119. * @action: The action to perform on the cores
  120. */
  121. static void kbase_pm_invoke(struct kbase_device *kbdev,
  122. enum kbase_pm_core_type core_type,
  123. u64 cores,
  124. enum kbasep_pm_action action)
  125. {
  126. u32 reg;
  127. u32 lo = cores & 0xFFFFFFFF;
  128. u32 hi = (cores >> 32) & 0xFFFFFFFF;
  129. lockdep_assert_held(&kbdev->pm.power_change_lock);
  130. reg = core_type_to_reg(core_type, action);
  131. KBASE_DEBUG_ASSERT(reg);
  132. if (cores) {
  133. u64 state = kbase_pm_get_state(kbdev, core_type, ACTION_READY);
  134. if (action == ACTION_PWRON)
  135. state |= cores;
  136. else if (action == ACTION_PWROFF)
  137. state &= ~cores;
  138. kbase_tlstream_aux_pm_state(core_type, state);
  139. }
  140. /* Tracing */
  141. if (cores) {
  142. if (action == ACTION_PWRON)
  143. switch (core_type) {
  144. case KBASE_PM_CORE_SHADER:
  145. KBASE_TRACE_ADD(kbdev, PM_PWRON, NULL, NULL, 0u,
  146. lo);
  147. break;
  148. case KBASE_PM_CORE_TILER:
  149. KBASE_TRACE_ADD(kbdev, PM_PWRON_TILER, NULL,
  150. NULL, 0u, lo);
  151. break;
  152. case KBASE_PM_CORE_L2:
  153. KBASE_TRACE_ADD(kbdev, PM_PWRON_L2, NULL, NULL,
  154. 0u, lo);
  155. break;
  156. default:
  157. break;
  158. }
  159. else if (action == ACTION_PWROFF)
  160. switch (core_type) {
  161. case KBASE_PM_CORE_SHADER:
  162. KBASE_TRACE_ADD(kbdev, PM_PWROFF, NULL, NULL,
  163. 0u, lo);
  164. break;
  165. case KBASE_PM_CORE_TILER:
  166. KBASE_TRACE_ADD(kbdev, PM_PWROFF_TILER, NULL,
  167. NULL, 0u, lo);
  168. break;
  169. case KBASE_PM_CORE_L2:
  170. KBASE_TRACE_ADD(kbdev, PM_PWROFF_L2, NULL, NULL,
  171. 0u, lo);
  172. /* disable snoops before L2 is turned off */
  173. kbase_pm_cache_snoop_disable(kbdev);
  174. break;
  175. default:
  176. break;
  177. }
  178. }
  179. if (lo != 0)
  180. kbase_reg_write(kbdev, GPU_CONTROL_REG(reg), lo, NULL);
  181. if (hi != 0)
  182. kbase_reg_write(kbdev, GPU_CONTROL_REG(reg + 4), hi, NULL);
  183. }
  184. /**
  185. * kbase_pm_get_state - Get information about a core set
  186. *
  187. * This function gets information (chosen by @action) about a set of cores of
  188. * a type given by @core_type. It is a static function used by
  189. * kbase_pm_get_present_cores(), kbase_pm_get_active_cores(),
  190. * kbase_pm_get_trans_cores() and kbase_pm_get_ready_cores().
  191. *
  192. * @kbdev: The kbase device structure of the device
  193. * @core_type: The type of core that the should be queried
  194. * @action: The property of the cores to query
  195. *
  196. * Return: A bit mask specifying the state of the cores
  197. */
  198. static u64 kbase_pm_get_state(struct kbase_device *kbdev,
  199. enum kbase_pm_core_type core_type,
  200. enum kbasep_pm_action action)
  201. {
  202. u32 reg;
  203. u32 lo, hi;
  204. reg = core_type_to_reg(core_type, action);
  205. KBASE_DEBUG_ASSERT(reg);
  206. lo = kbase_reg_read(kbdev, GPU_CONTROL_REG(reg), NULL);
  207. hi = kbase_reg_read(kbdev, GPU_CONTROL_REG(reg + 4), NULL);
  208. return (((u64) hi) << 32) | ((u64) lo);
  209. }
  210. void kbasep_pm_read_present_cores(struct kbase_device *kbdev)
  211. {
  212. kbdev->shader_inuse_bitmap = 0;
  213. kbdev->shader_needed_bitmap = 0;
  214. kbdev->shader_available_bitmap = 0;
  215. kbdev->tiler_available_bitmap = 0;
  216. kbdev->l2_users_count = 0;
  217. kbdev->l2_available_bitmap = 0;
  218. kbdev->tiler_needed_cnt = 0;
  219. kbdev->tiler_inuse_cnt = 0;
  220. memset(kbdev->shader_needed_cnt, 0, sizeof(kbdev->shader_needed_cnt));
  221. }
  222. /**
  223. * kbase_pm_get_present_cores - Get the cores that are present
  224. *
  225. * @kbdev: Kbase device
  226. * @type: The type of cores to query
  227. *
  228. * Return: Bitmask of the cores that are present
  229. */
  230. u64 kbase_pm_get_present_cores(struct kbase_device *kbdev,
  231. enum kbase_pm_core_type type)
  232. {
  233. KBASE_DEBUG_ASSERT(kbdev != NULL);
  234. switch (type) {
  235. case KBASE_PM_CORE_L2:
  236. return kbdev->gpu_props.props.raw_props.l2_present;
  237. case KBASE_PM_CORE_SHADER:
  238. return kbdev->gpu_props.props.raw_props.shader_present;
  239. case KBASE_PM_CORE_TILER:
  240. return kbdev->gpu_props.props.raw_props.tiler_present;
  241. }
  242. KBASE_DEBUG_ASSERT(0);
  243. return 0;
  244. }
  245. /**
  246. * kbase_pm_get_active_cores - Get the cores that are "active"
  247. * (busy processing work)
  248. *
  249. * @kbdev: Kbase device
  250. * @type: The type of cores to query
  251. *
  252. * Return: Bitmask of cores that are active
  253. */
  254. u64 kbase_pm_get_active_cores(struct kbase_device *kbdev,
  255. enum kbase_pm_core_type type)
  256. {
  257. return kbase_pm_get_state(kbdev, type, ACTION_PWRACTIVE);
  258. }
  259. /**
  260. * kbase_pm_get_trans_cores - Get the cores that are transitioning between
  261. * power states
  262. *
  263. * @kbdev: Kbase device
  264. * @type: The type of cores to query
  265. *
  266. * Return: Bitmask of cores that are transitioning
  267. */
  268. u64 kbase_pm_get_trans_cores(struct kbase_device *kbdev,
  269. enum kbase_pm_core_type type)
  270. {
  271. return kbase_pm_get_state(kbdev, type, ACTION_PWRTRANS);
  272. }
  273. /**
  274. * kbase_pm_get_ready_cores - Get the cores that are powered on
  275. *
  276. * @kbdev: Kbase device
  277. * @type: The type of cores to query
  278. *
  279. * Return: Bitmask of cores that are ready (powered on)
  280. */
  281. u64 kbase_pm_get_ready_cores(struct kbase_device *kbdev,
  282. enum kbase_pm_core_type type)
  283. {
  284. u64 result;
  285. result = kbase_pm_get_state(kbdev, type, ACTION_READY);
  286. switch (type) {
  287. case KBASE_PM_CORE_SHADER:
  288. KBASE_TRACE_ADD(kbdev, PM_CORES_POWERED, NULL, NULL, 0u,
  289. (u32) result);
  290. break;
  291. case KBASE_PM_CORE_TILER:
  292. KBASE_TRACE_ADD(kbdev, PM_CORES_POWERED_TILER, NULL, NULL, 0u,
  293. (u32) result);
  294. break;
  295. case KBASE_PM_CORE_L2:
  296. KBASE_TRACE_ADD(kbdev, PM_CORES_POWERED_L2, NULL, NULL, 0u,
  297. (u32) result);
  298. break;
  299. default:
  300. break;
  301. }
  302. return result;
  303. }
  304. /**
  305. * kbase_pm_transition_core_type - Perform power transitions for a particular
  306. * core type.
  307. *
  308. * This function will perform any available power transitions to make the actual
  309. * hardware state closer to the desired state. If a core is currently
  310. * transitioning then changes to the power state of that call cannot be made
  311. * until the transition has finished. Cores which are not present in the
  312. * hardware are ignored if they are specified in the desired_state bitmask,
  313. * however the return value will always be 0 in this case.
  314. *
  315. * @kbdev: The kbase device
  316. * @type: The core type to perform transitions for
  317. * @desired_state: A bit mask of the desired state of the cores
  318. * @in_use: A bit mask of the cores that are currently running
  319. * jobs. These cores have to be kept powered up because
  320. * there are jobs running (or about to run) on them.
  321. * @available: Receives a bit mask of the cores that the job
  322. * scheduler can use to submit jobs to. May be NULL if
  323. * this is not needed.
  324. * @powering_on: Bit mask to update with cores that are
  325. * transitioning to a power-on state.
  326. *
  327. * Return: true if the desired state has been reached, false otherwise
  328. */
  329. static bool kbase_pm_transition_core_type(struct kbase_device *kbdev,
  330. enum kbase_pm_core_type type,
  331. u64 desired_state,
  332. u64 in_use,
  333. u64 * const available,
  334. u64 *powering_on)
  335. {
  336. u64 present;
  337. u64 ready;
  338. u64 trans;
  339. u64 powerup;
  340. u64 powerdown;
  341. u64 powering_on_trans;
  342. u64 desired_state_in_use;
  343. lockdep_assert_held(&kbdev->pm.power_change_lock);
  344. /* Get current state */
  345. present = kbase_pm_get_present_cores(kbdev, type);
  346. trans = kbase_pm_get_trans_cores(kbdev, type);
  347. ready = kbase_pm_get_ready_cores(kbdev, type);
  348. /* mask off ready from trans in case transitions finished between the
  349. * register reads */
  350. trans &= ~ready;
  351. powering_on_trans = trans & *powering_on;
  352. *powering_on = powering_on_trans;
  353. if (available != NULL)
  354. *available = (ready | powering_on_trans) & desired_state;
  355. /* Update desired state to include the in-use cores. These have to be
  356. * kept powered up because there are jobs running or about to run on
  357. * these cores
  358. */
  359. desired_state_in_use = desired_state | in_use;
  360. /* Update state of whether l2 caches are powered */
  361. if (type == KBASE_PM_CORE_L2) {
  362. if ((ready == present) && (desired_state_in_use == ready) &&
  363. (trans == 0)) {
  364. /* All are ready, none will be turned off, and none are
  365. * transitioning */
  366. kbdev->pm.backend.l2_powered = 1;
  367. /*
  368. * Ensure snoops are enabled after L2 is powered up,
  369. * note that kbase keeps track of the snoop state, so
  370. * safe to repeatedly call.
  371. */
  372. kbase_pm_cache_snoop_enable(kbdev);
  373. if (kbdev->l2_users_count > 0) {
  374. /* Notify any registered l2 cache users
  375. * (optimized out when no users waiting) */
  376. wake_up(&kbdev->pm.backend.l2_powered_wait);
  377. }
  378. } else
  379. kbdev->pm.backend.l2_powered = 0;
  380. }
  381. if (desired_state_in_use == ready && (trans == 0))
  382. return true;
  383. /* Restrict the cores to those that are actually present */
  384. powerup = desired_state_in_use & present;
  385. powerdown = (~desired_state_in_use) & present;
  386. /* Restrict to cores that are not already in the desired state */
  387. powerup &= ~ready;
  388. powerdown &= ready;
  389. /* Don't transition any cores that are already transitioning, except for
  390. * Mali cores that support the following case:
  391. *
  392. * If the SHADER_PWRON or TILER_PWRON registers are written to turn on
  393. * a core that is currently transitioning to power off, then this is
  394. * remembered and the shader core is automatically powered up again once
  395. * the original transition completes. Once the automatic power on is
  396. * complete any job scheduled on the shader core should start.
  397. */
  398. powerdown &= ~trans;
  399. if (kbase_hw_has_feature(kbdev,
  400. BASE_HW_FEATURE_PWRON_DURING_PWROFF_TRANS))
  401. if (KBASE_PM_CORE_SHADER == type || KBASE_PM_CORE_TILER == type)
  402. trans = powering_on_trans; /* for exception cases, only
  403. * mask off cores in power on
  404. * transitions */
  405. powerup &= ~trans;
  406. /* Perform transitions if any */
  407. kbase_pm_invoke(kbdev, type, powerup, ACTION_PWRON);
  408. kbase_pm_invoke(kbdev, type, powerdown, ACTION_PWROFF);
  409. /* Recalculate cores transitioning on, and re-evaluate our state */
  410. powering_on_trans |= powerup;
  411. *powering_on = powering_on_trans;
  412. if (available != NULL)
  413. *available = (ready | powering_on_trans) & desired_state;
  414. return false;
  415. }
  416. /**
  417. * get_desired_cache_status - Determine which caches should be on for a
  418. * particular core state
  419. *
  420. * This function takes a bit mask of the present caches and the cores (or
  421. * caches) that are attached to the caches that will be powered. It then
  422. * computes which caches should be turned on to allow the cores requested to be
  423. * powered up.
  424. *
  425. * @present: The bit mask of present caches
  426. * @cores_powered: A bit mask of cores (or L2 caches) that are desired to
  427. * be powered
  428. *
  429. * Return: A bit mask of the caches that should be turned on
  430. */
  431. static u64 get_desired_cache_status(u64 present, u64 cores_powered)
  432. {
  433. u64 desired = 0;
  434. while (present) {
  435. /* Find out which is the highest set bit */
  436. u64 bit = fls64(present) - 1;
  437. u64 bit_mask = 1ull << bit;
  438. /* Create a mask which has all bits from 'bit' upwards set */
  439. u64 mask = ~(bit_mask - 1);
  440. /* If there are any cores powered at this bit or above (that
  441. * haven't previously been processed) then we need this core on
  442. */
  443. if (cores_powered & mask)
  444. desired |= bit_mask;
  445. /* Remove bits from cores_powered and present */
  446. cores_powered &= ~mask;
  447. present &= ~bit_mask;
  448. }
  449. return desired;
  450. }
  451. bool
  452. MOCKABLE(kbase_pm_check_transitions_nolock) (struct kbase_device *kbdev)
  453. {
  454. bool cores_are_available = false;
  455. bool in_desired_state = true;
  456. u64 desired_l2_state;
  457. u64 cores_powered;
  458. u64 tiler_available_bitmap;
  459. u64 shader_available_bitmap;
  460. u64 shader_ready_bitmap;
  461. u64 shader_transitioning_bitmap;
  462. u64 l2_available_bitmap;
  463. u64 prev_l2_available_bitmap;
  464. KBASE_DEBUG_ASSERT(kbdev != NULL);
  465. lockdep_assert_held(&kbdev->pm.power_change_lock);
  466. spin_lock(&kbdev->pm.backend.gpu_powered_lock);
  467. if (kbdev->pm.backend.gpu_powered == false) {
  468. spin_unlock(&kbdev->pm.backend.gpu_powered_lock);
  469. if (kbdev->pm.backend.desired_shader_state == 0 &&
  470. kbdev->pm.backend.desired_tiler_state == 0)
  471. return true;
  472. return false;
  473. }
  474. /* Trace that a change-state is being requested, and that it took
  475. * (effectively) no time to start it. This is useful for counting how
  476. * many state changes occurred, in a way that's backwards-compatible
  477. * with processing the trace data */
  478. kbase_timeline_pm_send_event(kbdev,
  479. KBASE_TIMELINE_PM_EVENT_CHANGE_GPU_STATE);
  480. kbase_timeline_pm_handle_event(kbdev,
  481. KBASE_TIMELINE_PM_EVENT_CHANGE_GPU_STATE);
  482. /* If any cores are already powered then, we must keep the caches on */
  483. cores_powered = kbase_pm_get_ready_cores(kbdev, KBASE_PM_CORE_SHADER);
  484. cores_powered |= kbdev->pm.backend.desired_shader_state;
  485. /* If there are l2 cache users registered, keep all l2s powered even if
  486. * all other cores are off. */
  487. if (kbdev->l2_users_count > 0)
  488. cores_powered |= kbdev->gpu_props.props.raw_props.l2_present;
  489. desired_l2_state = get_desired_cache_status(
  490. kbdev->gpu_props.props.raw_props.l2_present,
  491. cores_powered);
  492. /* If any l2 cache is on, then enable l2 #0, for use by job manager */
  493. if (desired_l2_state != 0) {
  494. desired_l2_state |= 1;
  495. /* Also enable tiler if l2 cache is powered */
  496. kbdev->pm.backend.desired_tiler_state =
  497. kbdev->gpu_props.props.raw_props.tiler_present;
  498. } else {
  499. kbdev->pm.backend.desired_tiler_state = 0;
  500. }
  501. prev_l2_available_bitmap = kbdev->l2_available_bitmap;
  502. in_desired_state &= kbase_pm_transition_core_type(kbdev,
  503. KBASE_PM_CORE_L2, desired_l2_state, 0,
  504. &l2_available_bitmap,
  505. &kbdev->pm.backend.powering_on_l2_state);
  506. if (kbdev->l2_available_bitmap != l2_available_bitmap)
  507. KBASE_TIMELINE_POWER_L2(kbdev, l2_available_bitmap);
  508. kbdev->l2_available_bitmap = l2_available_bitmap;
  509. if (in_desired_state) {
  510. in_desired_state &= kbase_pm_transition_core_type(kbdev,
  511. KBASE_PM_CORE_TILER,
  512. kbdev->pm.backend.desired_tiler_state,
  513. 0, &tiler_available_bitmap,
  514. &kbdev->pm.backend.powering_on_tiler_state);
  515. in_desired_state &= kbase_pm_transition_core_type(kbdev,
  516. KBASE_PM_CORE_SHADER,
  517. kbdev->pm.backend.desired_shader_state,
  518. kbdev->shader_inuse_bitmap,
  519. &shader_available_bitmap,
  520. &kbdev->pm.backend.powering_on_shader_state);
  521. if (kbdev->shader_available_bitmap != shader_available_bitmap) {
  522. KBASE_TRACE_ADD(kbdev, PM_CORES_CHANGE_AVAILABLE, NULL,
  523. NULL, 0u,
  524. (u32) shader_available_bitmap);
  525. KBASE_TIMELINE_POWER_SHADER(kbdev,
  526. shader_available_bitmap);
  527. }
  528. kbdev->shader_available_bitmap = shader_available_bitmap;
  529. if (kbdev->tiler_available_bitmap != tiler_available_bitmap) {
  530. KBASE_TRACE_ADD(kbdev, PM_CORES_CHANGE_AVAILABLE_TILER,
  531. NULL, NULL, 0u,
  532. (u32) tiler_available_bitmap);
  533. KBASE_TIMELINE_POWER_TILER(kbdev,
  534. tiler_available_bitmap);
  535. }
  536. kbdev->tiler_available_bitmap = tiler_available_bitmap;
  537. } else if ((l2_available_bitmap &
  538. kbdev->gpu_props.props.raw_props.tiler_present) !=
  539. kbdev->gpu_props.props.raw_props.tiler_present) {
  540. tiler_available_bitmap = 0;
  541. if (kbdev->tiler_available_bitmap != tiler_available_bitmap)
  542. KBASE_TIMELINE_POWER_TILER(kbdev,
  543. tiler_available_bitmap);
  544. kbdev->tiler_available_bitmap = tiler_available_bitmap;
  545. }
  546. /* State updated for slow-path waiters */
  547. kbdev->pm.backend.gpu_in_desired_state = in_desired_state;
  548. shader_ready_bitmap = kbase_pm_get_ready_cores(kbdev,
  549. KBASE_PM_CORE_SHADER);
  550. shader_transitioning_bitmap = kbase_pm_get_trans_cores(kbdev,
  551. KBASE_PM_CORE_SHADER);
  552. /* Determine whether the cores are now available (even if the set of
  553. * available cores is empty). Note that they can be available even if
  554. * we've not finished transitioning to the desired state */
  555. if ((kbdev->shader_available_bitmap &
  556. kbdev->pm.backend.desired_shader_state)
  557. == kbdev->pm.backend.desired_shader_state &&
  558. (kbdev->tiler_available_bitmap &
  559. kbdev->pm.backend.desired_tiler_state)
  560. == kbdev->pm.backend.desired_tiler_state) {
  561. cores_are_available = true;
  562. KBASE_TRACE_ADD(kbdev, PM_CORES_AVAILABLE, NULL, NULL, 0u,
  563. (u32)(kbdev->shader_available_bitmap &
  564. kbdev->pm.backend.desired_shader_state));
  565. KBASE_TRACE_ADD(kbdev, PM_CORES_AVAILABLE_TILER, NULL, NULL, 0u,
  566. (u32)(kbdev->tiler_available_bitmap &
  567. kbdev->pm.backend.desired_tiler_state));
  568. /* Log timelining information about handling events that power
  569. * up cores, to match up either with immediate submission either
  570. * because cores already available, or from PM IRQ */
  571. if (!in_desired_state)
  572. kbase_timeline_pm_send_event(kbdev,
  573. KBASE_TIMELINE_PM_EVENT_GPU_STATE_CHANGED);
  574. }
  575. if (in_desired_state) {
  576. KBASE_DEBUG_ASSERT(cores_are_available);
  577. kbase_tlstream_aux_pm_state(
  578. KBASE_PM_CORE_L2,
  579. kbase_pm_get_ready_cores(
  580. kbdev, KBASE_PM_CORE_L2));
  581. kbase_tlstream_aux_pm_state(
  582. KBASE_PM_CORE_SHADER,
  583. kbase_pm_get_ready_cores(
  584. kbdev, KBASE_PM_CORE_SHADER));
  585. kbase_tlstream_aux_pm_state(
  586. KBASE_PM_CORE_TILER,
  587. kbase_pm_get_ready_cores(
  588. kbdev,
  589. KBASE_PM_CORE_TILER));
  590. KBASE_TRACE_ADD(kbdev, PM_DESIRED_REACHED, NULL, NULL,
  591. kbdev->pm.backend.gpu_in_desired_state,
  592. (u32)kbdev->pm.backend.desired_shader_state);
  593. KBASE_TRACE_ADD(kbdev, PM_DESIRED_REACHED_TILER, NULL, NULL, 0u,
  594. (u32)kbdev->pm.backend.desired_tiler_state);
  595. /* Log timelining information for synchronous waiters */
  596. kbase_timeline_pm_send_event(kbdev,
  597. KBASE_TIMELINE_PM_EVENT_GPU_STATE_CHANGED);
  598. /* Wake slow-path waiters. Job scheduler does not use this. */
  599. KBASE_TRACE_ADD(kbdev, PM_WAKE_WAITERS, NULL, NULL, 0u, 0);
  600. wake_up(&kbdev->pm.backend.gpu_in_desired_state_wait);
  601. }
  602. spin_unlock(&kbdev->pm.backend.gpu_powered_lock);
  603. /* kbase_pm_ca_update_core_status can cause one-level recursion into
  604. * this function, so it must only be called once all changes to kbdev
  605. * have been committed, and after the gpu_powered_lock has been
  606. * dropped. */
  607. if (kbdev->shader_ready_bitmap != shader_ready_bitmap ||
  608. kbdev->shader_transitioning_bitmap != shader_transitioning_bitmap) {
  609. kbdev->shader_ready_bitmap = shader_ready_bitmap;
  610. kbdev->shader_transitioning_bitmap =
  611. shader_transitioning_bitmap;
  612. kbase_pm_ca_update_core_status(kbdev, shader_ready_bitmap,
  613. shader_transitioning_bitmap);
  614. }
  615. /* The core availability policy is not allowed to keep core group 0
  616. * turned off (unless it was changing the l2 power state) */
  617. if (!((shader_ready_bitmap | shader_transitioning_bitmap) &
  618. kbdev->gpu_props.props.coherency_info.group[0].core_mask) &&
  619. (prev_l2_available_bitmap == desired_l2_state) &&
  620. !(kbase_pm_ca_get_core_mask(kbdev) &
  621. kbdev->gpu_props.props.coherency_info.group[0].core_mask))
  622. BUG();
  623. /* The core availability policy is allowed to keep core group 1 off,
  624. * but all jobs specifically targeting CG1 must fail */
  625. if (!((shader_ready_bitmap | shader_transitioning_bitmap) &
  626. kbdev->gpu_props.props.coherency_info.group[1].core_mask) &&
  627. !(kbase_pm_ca_get_core_mask(kbdev) &
  628. kbdev->gpu_props.props.coherency_info.group[1].core_mask))
  629. kbdev->pm.backend.cg1_disabled = true;
  630. else
  631. kbdev->pm.backend.cg1_disabled = false;
  632. return cores_are_available;
  633. }
  634. /* Timeout for kbase_pm_check_transitions_sync when wait_event_killable has
  635. * aborted due to a fatal signal. If the time spent waiting has exceeded this
  636. * threshold then there is most likely a hardware issue. */
  637. #define PM_TIMEOUT (5*HZ) /* 5s */
  638. void kbase_pm_check_transitions_sync(struct kbase_device *kbdev)
  639. {
  640. unsigned long flags;
  641. unsigned long timeout;
  642. bool cores_are_available;
  643. int ret;
  644. /* Force the transition to be checked and reported - the cores may be
  645. * 'available' (for job submission) but not fully powered up. */
  646. spin_lock_irqsave(&kbdev->pm.power_change_lock, flags);
  647. cores_are_available = kbase_pm_check_transitions_nolock(kbdev);
  648. /* Don't need 'cores_are_available', because we don't return anything */
  649. CSTD_UNUSED(cores_are_available);
  650. spin_unlock_irqrestore(&kbdev->pm.power_change_lock, flags);
  651. timeout = jiffies + PM_TIMEOUT;
  652. /* Wait for cores */
  653. ret = wait_event_killable(kbdev->pm.backend.gpu_in_desired_state_wait,
  654. kbdev->pm.backend.gpu_in_desired_state);
  655. if (ret < 0 && time_after(jiffies, timeout)) {
  656. dev_err(kbdev->dev, "Power transition timed out unexpectedly\n");
  657. dev_err(kbdev->dev, "Desired state :\n");
  658. dev_err(kbdev->dev, "\tShader=%016llx\n",
  659. kbdev->pm.backend.desired_shader_state);
  660. dev_err(kbdev->dev, "\tTiler =%016llx\n",
  661. kbdev->pm.backend.desired_tiler_state);
  662. dev_err(kbdev->dev, "Current state :\n");
  663. dev_err(kbdev->dev, "\tShader=%08x%08x\n",
  664. kbase_reg_read(kbdev,
  665. GPU_CONTROL_REG(SHADER_READY_HI), NULL),
  666. kbase_reg_read(kbdev,
  667. GPU_CONTROL_REG(SHADER_READY_LO),
  668. NULL));
  669. dev_err(kbdev->dev, "\tTiler =%08x%08x\n",
  670. kbase_reg_read(kbdev,
  671. GPU_CONTROL_REG(TILER_READY_HI), NULL),
  672. kbase_reg_read(kbdev,
  673. GPU_CONTROL_REG(TILER_READY_LO), NULL));
  674. dev_err(kbdev->dev, "\tL2 =%08x%08x\n",
  675. kbase_reg_read(kbdev,
  676. GPU_CONTROL_REG(L2_READY_HI), NULL),
  677. kbase_reg_read(kbdev,
  678. GPU_CONTROL_REG(L2_READY_LO), NULL));
  679. dev_err(kbdev->dev, "Cores transitioning :\n");
  680. dev_err(kbdev->dev, "\tShader=%08x%08x\n",
  681. kbase_reg_read(kbdev, GPU_CONTROL_REG(
  682. SHADER_PWRTRANS_HI), NULL),
  683. kbase_reg_read(kbdev, GPU_CONTROL_REG(
  684. SHADER_PWRTRANS_LO), NULL));
  685. dev_err(kbdev->dev, "\tTiler =%08x%08x\n",
  686. kbase_reg_read(kbdev, GPU_CONTROL_REG(
  687. TILER_PWRTRANS_HI), NULL),
  688. kbase_reg_read(kbdev, GPU_CONTROL_REG(
  689. TILER_PWRTRANS_LO), NULL));
  690. dev_err(kbdev->dev, "\tL2 =%08x%08x\n",
  691. kbase_reg_read(kbdev, GPU_CONTROL_REG(
  692. L2_PWRTRANS_HI), NULL),
  693. kbase_reg_read(kbdev, GPU_CONTROL_REG(
  694. L2_PWRTRANS_LO), NULL));
  695. #if KBASE_GPU_RESET_EN
  696. dev_err(kbdev->dev, "Sending reset to GPU - all running jobs will be lost\n");
  697. if (kbase_prepare_to_reset_gpu(kbdev))
  698. kbase_reset_gpu(kbdev);
  699. #endif
  700. } else {
  701. /* Log timelining information that a change in state has
  702. * completed */
  703. kbase_timeline_pm_handle_event(kbdev,
  704. KBASE_TIMELINE_PM_EVENT_GPU_STATE_CHANGED);
  705. }
  706. }
  707. void kbase_pm_enable_interrupts(struct kbase_device *kbdev)
  708. {
  709. unsigned long flags;
  710. KBASE_DEBUG_ASSERT(kbdev != NULL);
  711. /*
  712. * Clear all interrupts,
  713. * and unmask them all.
  714. */
  715. spin_lock_irqsave(&kbdev->pm.power_change_lock, flags);
  716. kbase_reg_write(kbdev, GPU_CONTROL_REG(GPU_IRQ_CLEAR), GPU_IRQ_REG_ALL,
  717. NULL);
  718. kbase_reg_write(kbdev, GPU_CONTROL_REG(GPU_IRQ_MASK), GPU_IRQ_REG_ALL,
  719. NULL);
  720. spin_unlock_irqrestore(&kbdev->pm.power_change_lock, flags);
  721. kbase_reg_write(kbdev, JOB_CONTROL_REG(JOB_IRQ_CLEAR), 0xFFFFFFFF,
  722. NULL);
  723. kbase_reg_write(kbdev, JOB_CONTROL_REG(JOB_IRQ_MASK), 0xFFFFFFFF, NULL);
  724. kbase_reg_write(kbdev, MMU_REG(MMU_IRQ_CLEAR), 0xFFFFFFFF, NULL);
  725. kbase_reg_write(kbdev, MMU_REG(MMU_IRQ_MASK), 0xFFFFFFFF, NULL);
  726. }
  727. void kbase_pm_disable_interrupts(struct kbase_device *kbdev)
  728. {
  729. unsigned long flags;
  730. KBASE_DEBUG_ASSERT(kbdev != NULL);
  731. /*
  732. * Mask all interrupts,
  733. * and clear them all.
  734. */
  735. spin_lock_irqsave(&kbdev->pm.power_change_lock, flags);
  736. kbase_reg_write(kbdev, GPU_CONTROL_REG(GPU_IRQ_MASK), 0, NULL);
  737. kbase_reg_write(kbdev, GPU_CONTROL_REG(GPU_IRQ_CLEAR), GPU_IRQ_REG_ALL,
  738. NULL);
  739. spin_unlock_irqrestore(&kbdev->pm.power_change_lock, flags);
  740. kbase_reg_write(kbdev, JOB_CONTROL_REG(JOB_IRQ_MASK), 0, NULL);
  741. kbase_reg_write(kbdev, JOB_CONTROL_REG(JOB_IRQ_CLEAR), 0xFFFFFFFF,
  742. NULL);
  743. kbase_reg_write(kbdev, MMU_REG(MMU_IRQ_MASK), 0, NULL);
  744. kbase_reg_write(kbdev, MMU_REG(MMU_IRQ_CLEAR), 0xFFFFFFFF, NULL);
  745. }
  746. /*
  747. * pmu layout:
  748. * 0x0000: PMU TAG (RO) (0xCAFECAFE)
  749. * 0x0004: PMU VERSION ID (RO) (0x00000000)
  750. * 0x0008: CLOCK ENABLE (RW) (31:1 SBZ, 0 CLOCK STATE)
  751. */
  752. void kbase_pm_clock_on(struct kbase_device *kbdev, bool is_resume)
  753. {
  754. bool reset_required = is_resume;
  755. struct kbasep_js_device_data *js_devdata = &kbdev->js_data;
  756. unsigned long flags;
  757. int i;
  758. KBASE_DEBUG_ASSERT(kbdev != NULL);
  759. lockdep_assert_held(&js_devdata->runpool_mutex);
  760. lockdep_assert_held(&kbdev->pm.lock);
  761. if (kbdev->pm.backend.gpu_powered) {
  762. /* Already turned on */
  763. if (kbdev->poweroff_pending)
  764. kbase_pm_enable_interrupts(kbdev);
  765. kbdev->poweroff_pending = false;
  766. KBASE_DEBUG_ASSERT(!is_resume);
  767. return;
  768. }
  769. kbdev->poweroff_pending = false;
  770. KBASE_TRACE_ADD(kbdev, PM_GPU_ON, NULL, NULL, 0u, 0u);
  771. if (is_resume && kbdev->pm.backend.callback_power_resume) {
  772. kbdev->pm.backend.callback_power_resume(kbdev);
  773. return;
  774. } else if (kbdev->pm.backend.callback_power_on) {
  775. kbdev->pm.backend.callback_power_on(kbdev);
  776. /* If your platform properly keeps the GPU state you may use the
  777. * return value of the callback_power_on function to
  778. * conditionally reset the GPU on power up. Currently we are
  779. * conservative and always reset the GPU. */
  780. reset_required = true;
  781. }
  782. spin_lock_irqsave(&kbdev->pm.backend.gpu_powered_lock, flags);
  783. kbdev->pm.backend.gpu_powered = true;
  784. spin_unlock_irqrestore(&kbdev->pm.backend.gpu_powered_lock, flags);
  785. if (reset_required) {
  786. /* GPU state was lost, reset GPU to ensure it is in a
  787. * consistent state */
  788. kbase_pm_init_hw(kbdev, PM_ENABLE_IRQS);
  789. }
  790. /* Reprogram the GPU's MMU */
  791. for (i = 0; i < kbdev->nr_hw_address_spaces; i++) {
  792. struct kbase_as *as = &kbdev->as[i];
  793. mutex_lock(&as->transaction_mutex);
  794. spin_lock_irqsave(&js_devdata->runpool_irq.lock, flags);
  795. if (js_devdata->runpool_irq.per_as_data[i].kctx)
  796. kbase_mmu_update(
  797. js_devdata->runpool_irq.per_as_data[i].kctx);
  798. else
  799. kbase_mmu_disable_as(kbdev, i);
  800. spin_unlock_irqrestore(&js_devdata->runpool_irq.lock, flags);
  801. mutex_unlock(&as->transaction_mutex);
  802. }
  803. /* Lastly, enable the interrupts */
  804. kbase_pm_enable_interrupts(kbdev);
  805. }
  806. bool kbase_pm_clock_off(struct kbase_device *kbdev, bool is_suspend)
  807. {
  808. unsigned long flags;
  809. KBASE_DEBUG_ASSERT(kbdev != NULL);
  810. lockdep_assert_held(&kbdev->pm.lock);
  811. /* ASSERT that the cores should now be unavailable. No lock needed. */
  812. KBASE_DEBUG_ASSERT(kbdev->shader_available_bitmap == 0u);
  813. kbdev->poweroff_pending = true;
  814. if (!kbdev->pm.backend.gpu_powered) {
  815. /* Already turned off */
  816. if (is_suspend && kbdev->pm.backend.callback_power_suspend)
  817. kbdev->pm.backend.callback_power_suspend(kbdev);
  818. return true;
  819. }
  820. KBASE_TRACE_ADD(kbdev, PM_GPU_OFF, NULL, NULL, 0u, 0u);
  821. /* Disable interrupts. This also clears any outstanding interrupts */
  822. kbase_pm_disable_interrupts(kbdev);
  823. /* Ensure that any IRQ handlers have finished */
  824. kbase_synchronize_irqs(kbdev);
  825. spin_lock_irqsave(&kbdev->pm.backend.gpu_powered_lock, flags);
  826. if (atomic_read(&kbdev->faults_pending)) {
  827. /* Page/bus faults are still being processed. The GPU can not
  828. * be powered off until they have completed */
  829. spin_unlock_irqrestore(&kbdev->pm.backend.gpu_powered_lock,
  830. flags);
  831. return false;
  832. }
  833. kbase_pm_cache_snoop_disable(kbdev);
  834. /* The GPU power may be turned off from this point */
  835. kbdev->pm.backend.gpu_powered = false;
  836. spin_unlock_irqrestore(&kbdev->pm.backend.gpu_powered_lock, flags);
  837. if (is_suspend && kbdev->pm.backend.callback_power_suspend)
  838. kbdev->pm.backend.callback_power_suspend(kbdev);
  839. else if (kbdev->pm.backend.callback_power_off)
  840. kbdev->pm.backend.callback_power_off(kbdev);
  841. return true;
  842. }
  843. struct kbasep_reset_timeout_data {
  844. struct hrtimer timer;
  845. bool timed_out;
  846. struct kbase_device *kbdev;
  847. };
  848. void kbase_pm_reset_done(struct kbase_device *kbdev)
  849. {
  850. KBASE_DEBUG_ASSERT(kbdev != NULL);
  851. kbdev->pm.backend.reset_done = true;
  852. wake_up(&kbdev->pm.backend.reset_done_wait);
  853. }
  854. /**
  855. * kbase_pm_wait_for_reset - Wait for a reset to happen
  856. *
  857. * Wait for the %RESET_COMPLETED IRQ to occur, then reset the waiting state.
  858. *
  859. * @kbdev: Kbase device
  860. */
  861. static void kbase_pm_wait_for_reset(struct kbase_device *kbdev)
  862. {
  863. lockdep_assert_held(&kbdev->pm.lock);
  864. wait_event(kbdev->pm.backend.reset_done_wait,
  865. (kbdev->pm.backend.reset_done));
  866. kbdev->pm.backend.reset_done = false;
  867. }
  868. static enum hrtimer_restart kbasep_reset_timeout(struct hrtimer *timer)
  869. {
  870. struct kbasep_reset_timeout_data *rtdata =
  871. container_of(timer, struct kbasep_reset_timeout_data, timer);
  872. rtdata->timed_out = 1;
  873. /* Set the wait queue to wake up kbase_pm_init_hw even though the reset
  874. * hasn't completed */
  875. kbase_pm_reset_done(rtdata->kbdev);
  876. return HRTIMER_NORESTART;
  877. }
  878. static void kbase_pm_hw_issues_detect(struct kbase_device *kbdev)
  879. {
  880. struct device_node *np = kbdev->dev->of_node;
  881. u32 jm_values[4];
  882. const u32 gpu_id = kbdev->gpu_props.props.raw_props.gpu_id;
  883. const u32 prod_id = (gpu_id & GPU_ID_VERSION_PRODUCT_ID) >>
  884. GPU_ID_VERSION_PRODUCT_ID_SHIFT;
  885. const u32 major = (gpu_id & GPU_ID_VERSION_MAJOR) >>
  886. GPU_ID_VERSION_MAJOR_SHIFT;
  887. kbdev->hw_quirks_sc = 0;
  888. /* Needed due to MIDBASE-1494: LS_PAUSEBUFFER_DISABLE. See PRLAM-8443.
  889. * and needed due to MIDGLES-3539. See PRLAM-11035 */
  890. if (kbase_hw_has_issue(kbdev, BASE_HW_ISSUE_8443) ||
  891. kbase_hw_has_issue(kbdev, BASE_HW_ISSUE_11035))
  892. kbdev->hw_quirks_sc |= SC_LS_PAUSEBUFFER_DISABLE;
  893. /* Needed due to MIDBASE-2054: SDC_DISABLE_OQ_DISCARD. See PRLAM-10327.
  894. */
  895. if (kbase_hw_has_issue(kbdev, BASE_HW_ISSUE_10327))
  896. kbdev->hw_quirks_sc |= SC_SDC_DISABLE_OQ_DISCARD;
  897. /* Needed due to MIDBASE-2795. ENABLE_TEXGRD_FLAGS. See PRLAM-10797. */
  898. if (kbase_hw_has_issue(kbdev, BASE_HW_ISSUE_10797))
  899. kbdev->hw_quirks_sc |= SC_ENABLE_TEXGRD_FLAGS;
  900. if (!kbase_hw_has_issue(kbdev, GPUCORE_1619)) {
  901. if (prod_id < 0x760 || prod_id == 0x6956) /* T60x, T62x, T72x */
  902. kbdev->hw_quirks_sc |= SC_LS_ATTR_CHECK_DISABLE;
  903. else if (prod_id >= 0x760 && prod_id <= 0x880) /* T76x, T8xx */
  904. kbdev->hw_quirks_sc |= SC_LS_ALLOW_ATTR_TYPES;
  905. }
  906. kbdev->hw_quirks_tiler = kbase_reg_read(kbdev,
  907. GPU_CONTROL_REG(TILER_CONFIG), NULL);
  908. /* Set tiler clock gate override if required */
  909. if (kbase_hw_has_issue(kbdev, BASE_HW_ISSUE_T76X_3953))
  910. kbdev->hw_quirks_tiler |= TC_CLOCK_GATE_OVERRIDE;
  911. /* Limit the GPU bus bandwidth if the platform needs this. */
  912. kbdev->hw_quirks_mmu = kbase_reg_read(kbdev,
  913. GPU_CONTROL_REG(L2_MMU_CONFIG), NULL);
  914. /* Limit read ID width for AXI */
  915. kbdev->hw_quirks_mmu &= ~(L2_MMU_CONFIG_LIMIT_EXTERNAL_READS);
  916. kbdev->hw_quirks_mmu |= (DEFAULT_ARID_LIMIT & 0x3) <<
  917. L2_MMU_CONFIG_LIMIT_EXTERNAL_READS_SHIFT;
  918. /* Limit write ID width for AXI */
  919. kbdev->hw_quirks_mmu &= ~(L2_MMU_CONFIG_LIMIT_EXTERNAL_WRITES);
  920. kbdev->hw_quirks_mmu |= (DEFAULT_AWID_LIMIT & 0x3) <<
  921. L2_MMU_CONFIG_LIMIT_EXTERNAL_WRITES_SHIFT;
  922. if (kbdev->system_coherency == COHERENCY_ACE) {
  923. /* Allow memory configuration disparity to be ignored, we
  924. * optimize the use of shared memory and thus we expect
  925. * some disparity in the memory configuration */
  926. kbdev->hw_quirks_mmu |= L2_MMU_CONFIG_ALLOW_SNOOP_DISPARITY;
  927. }
  928. /* Only for T86x/T88x-based products after r2p0 */
  929. if (prod_id >= 0x860 && prod_id <= 0x880 && major >= 2) {
  930. /* The JM_CONFIG register is specified as follows in the
  931. T86x/T88x Engineering Specification Supplement:
  932. The values are read from device tree in order.
  933. */
  934. #define TIMESTAMP_OVERRIDE 1
  935. #define CLOCK_GATE_OVERRIDE (1<<1)
  936. #define JOB_THROTTLE_ENABLE (1<<2)
  937. #define JOB_THROTTLE_LIMIT_SHIFT 3
  938. /* 6 bits in the register */
  939. const u32 jm_max_limit = 0x3F;
  940. if (of_property_read_u32_array(np,
  941. "jm_config",
  942. &jm_values[0],
  943. ARRAY_SIZE(jm_values))) {
  944. /* Entry not in device tree, use defaults */
  945. jm_values[0] = 0;
  946. jm_values[1] = 0;
  947. jm_values[2] = 0;
  948. jm_values[3] = jm_max_limit; /* Max value */
  949. }
  950. /* Limit throttle limit to 6 bits*/
  951. if (jm_values[3] > jm_max_limit) {
  952. dev_dbg(kbdev->dev, "JOB_THROTTLE_LIMIT supplied in device tree is too large. Limiting to MAX (63).");
  953. jm_values[3] = jm_max_limit;
  954. }
  955. /* Aggregate to one integer. */
  956. kbdev->hw_quirks_jm = (jm_values[0] ? TIMESTAMP_OVERRIDE : 0);
  957. kbdev->hw_quirks_jm |= (jm_values[1] ? CLOCK_GATE_OVERRIDE : 0);
  958. kbdev->hw_quirks_jm |= (jm_values[2] ? JOB_THROTTLE_ENABLE : 0);
  959. kbdev->hw_quirks_jm |= (jm_values[3] <<
  960. JOB_THROTTLE_LIMIT_SHIFT);
  961. } else {
  962. kbdev->hw_quirks_jm = KBASE_JM_CONFIG_UNUSED;
  963. }
  964. }
  965. static void kbase_pm_hw_issues_apply(struct kbase_device *kbdev)
  966. {
  967. if (kbdev->hw_quirks_sc)
  968. kbase_reg_write(kbdev, GPU_CONTROL_REG(SHADER_CONFIG),
  969. kbdev->hw_quirks_sc, NULL);
  970. kbase_reg_write(kbdev, GPU_CONTROL_REG(TILER_CONFIG),
  971. kbdev->hw_quirks_tiler, NULL);
  972. kbase_reg_write(kbdev, GPU_CONTROL_REG(L2_MMU_CONFIG),
  973. kbdev->hw_quirks_mmu, NULL);
  974. if (kbdev->hw_quirks_jm != KBASE_JM_CONFIG_UNUSED)
  975. kbase_reg_write(kbdev, GPU_CONTROL_REG(JM_CONFIG),
  976. kbdev->hw_quirks_jm, NULL);
  977. }
  978. void kbase_pm_cache_snoop_enable(struct kbase_device *kbdev)
  979. {
  980. if ((kbdev->system_coherency == COHERENCY_ACE) &&
  981. !kbdev->cci_snoop_enabled) {
  982. #ifdef CONFIG_ARM64
  983. if (kbdev->snoop_enable_smc != 0)
  984. kbase_invoke_smc_fid(kbdev->snoop_enable_smc, 0, 0, 0);
  985. #endif
  986. dev_dbg(kbdev->dev, "MALI - CCI Snoops - Enabled\n");
  987. kbdev->cci_snoop_enabled = true;
  988. }
  989. }
  990. void kbase_pm_cache_snoop_disable(struct kbase_device *kbdev)
  991. {
  992. if ((kbdev->system_coherency == COHERENCY_ACE) &&
  993. kbdev->cci_snoop_enabled) {
  994. #ifdef CONFIG_ARM64
  995. if (kbdev->snoop_disable_smc != 0) {
  996. mali_cci_flush_l2(kbdev);
  997. kbase_invoke_smc_fid(kbdev->snoop_disable_smc, 0, 0, 0);
  998. }
  999. #endif // ifdef CONFIG_ARM64
  1000. dev_dbg(kbdev->dev, "MALI - CCI Snoops Disabled\n");
  1001. kbdev->cci_snoop_enabled = false;
  1002. }
  1003. }
  1004. int kbase_pm_init_hw(struct kbase_device *kbdev, unsigned int flags)
  1005. {
  1006. unsigned long irq_flags;
  1007. struct kbasep_reset_timeout_data rtdata;
  1008. KBASE_DEBUG_ASSERT(kbdev != NULL);
  1009. lockdep_assert_held(&kbdev->pm.lock);
  1010. /* Ensure the clock is on before attempting to access the hardware */
  1011. if (!kbdev->pm.backend.gpu_powered) {
  1012. if (kbdev->pm.backend.callback_power_on)
  1013. kbdev->pm.backend.callback_power_on(kbdev);
  1014. spin_lock_irqsave(&kbdev->pm.backend.gpu_powered_lock,
  1015. irq_flags);
  1016. kbdev->pm.backend.gpu_powered = true;
  1017. spin_unlock_irqrestore(&kbdev->pm.backend.gpu_powered_lock,
  1018. irq_flags);
  1019. }
  1020. /* Ensure interrupts are off to begin with, this also clears any
  1021. * outstanding interrupts */
  1022. kbase_pm_disable_interrupts(kbdev);
  1023. /* Ensure cache snoops are disabled before reset. */
  1024. kbase_pm_cache_snoop_disable(kbdev);
  1025. /* Prepare for the soft-reset */
  1026. kbdev->pm.backend.reset_done = false;
  1027. /* The cores should be made unavailable due to the reset */
  1028. spin_lock_irqsave(&kbdev->pm.power_change_lock, irq_flags);
  1029. if (kbdev->shader_available_bitmap != 0u)
  1030. KBASE_TRACE_ADD(kbdev, PM_CORES_CHANGE_AVAILABLE, NULL,
  1031. NULL, 0u, (u32)0u);
  1032. if (kbdev->tiler_available_bitmap != 0u)
  1033. KBASE_TRACE_ADD(kbdev, PM_CORES_CHANGE_AVAILABLE_TILER,
  1034. NULL, NULL, 0u, (u32)0u);
  1035. kbdev->shader_available_bitmap = 0u;
  1036. kbdev->tiler_available_bitmap = 0u;
  1037. kbdev->l2_available_bitmap = 0u;
  1038. spin_unlock_irqrestore(&kbdev->pm.power_change_lock, irq_flags);
  1039. /* Soft reset the GPU */
  1040. KBASE_TRACE_ADD(kbdev, CORE_GPU_SOFT_RESET, NULL, NULL, 0u, 0);
  1041. kbase_tlstream_jd_gpu_soft_reset(kbdev);
  1042. kbase_reg_write(kbdev, GPU_CONTROL_REG(GPU_COMMAND),
  1043. GPU_COMMAND_SOFT_RESET, NULL);
  1044. /* Unmask the reset complete interrupt only */
  1045. kbase_reg_write(kbdev, GPU_CONTROL_REG(GPU_IRQ_MASK), RESET_COMPLETED,
  1046. NULL);
  1047. /* Initialize a structure for tracking the status of the reset */
  1048. rtdata.kbdev = kbdev;
  1049. rtdata.timed_out = 0;
  1050. /* Create a timer to use as a timeout on the reset */
  1051. hrtimer_init_on_stack(&rtdata.timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
  1052. rtdata.timer.function = kbasep_reset_timeout;
  1053. hrtimer_start(&rtdata.timer, HR_TIMER_DELAY_MSEC(RESET_TIMEOUT),
  1054. HRTIMER_MODE_REL);
  1055. /* Wait for the RESET_COMPLETED interrupt to be raised */
  1056. kbase_pm_wait_for_reset(kbdev);
  1057. if (rtdata.timed_out == 0) {
  1058. /* GPU has been reset */
  1059. hrtimer_cancel(&rtdata.timer);
  1060. destroy_hrtimer_on_stack(&rtdata.timer);
  1061. goto out;
  1062. }
  1063. /* No interrupt has been received - check if the RAWSTAT register says
  1064. * the reset has completed */
  1065. if (kbase_reg_read(kbdev, GPU_CONTROL_REG(GPU_IRQ_RAWSTAT), NULL) &
  1066. RESET_COMPLETED) {
  1067. /* The interrupt is set in the RAWSTAT; this suggests that the
  1068. * interrupts are not getting to the CPU */
  1069. dev_err(kbdev->dev, "Reset interrupt didn't reach CPU. Check interrupt assignments.\n");
  1070. /* If interrupts aren't working we can't continue. */
  1071. destroy_hrtimer_on_stack(&rtdata.timer);
  1072. return -EINVAL;
  1073. }
  1074. /* The GPU doesn't seem to be responding to the reset so try a hard
  1075. * reset */
  1076. dev_err(kbdev->dev, "Failed to soft-reset GPU (timed out after %d ms), now attempting a hard reset\n",
  1077. RESET_TIMEOUT);
  1078. KBASE_TRACE_ADD(kbdev, CORE_GPU_HARD_RESET, NULL, NULL, 0u, 0);
  1079. kbase_reg_write(kbdev, GPU_CONTROL_REG(GPU_COMMAND),
  1080. GPU_COMMAND_HARD_RESET, NULL);
  1081. /* Restart the timer to wait for the hard reset to complete */
  1082. rtdata.timed_out = 0;
  1083. hrtimer_start(&rtdata.timer, HR_TIMER_DELAY_MSEC(RESET_TIMEOUT),
  1084. HRTIMER_MODE_REL);
  1085. /* Wait for the RESET_COMPLETED interrupt to be raised */
  1086. kbase_pm_wait_for_reset(kbdev);
  1087. if (rtdata.timed_out == 0) {
  1088. /* GPU has been reset */
  1089. hrtimer_cancel(&rtdata.timer);
  1090. destroy_hrtimer_on_stack(&rtdata.timer);
  1091. goto out;
  1092. }
  1093. destroy_hrtimer_on_stack(&rtdata.timer);
  1094. dev_err(kbdev->dev, "Failed to hard-reset the GPU (timed out after %d ms)\n",
  1095. RESET_TIMEOUT);
  1096. /* The GPU still hasn't reset, give up */
  1097. return -EINVAL;
  1098. out:
  1099. if (flags & PM_HW_ISSUES_DETECT)
  1100. kbase_pm_hw_issues_detect(kbdev);
  1101. kbase_pm_hw_issues_apply(kbdev);
  1102. kbase_cache_set_coherency_mode(kbdev, kbdev->system_coherency);
  1103. if (kbase_hw_has_feature(kbdev, BASE_HW_FEATURE_PROTECTED_MODE)) {
  1104. u32 gpu_status = kbase_reg_read(kbdev,
  1105. GPU_CONTROL_REG(GPU_STATUS), NULL);
  1106. kbdev->secure_mode = (gpu_status &
  1107. GPU_STATUS_PROTECTED_MODE_ACTIVE) != 0;
  1108. }
  1109. /* If cycle counter was in use re-enable it, enable_irqs will only be
  1110. * false when called from kbase_pm_powerup */
  1111. if (kbdev->pm.backend.gpu_cycle_counter_requests &&
  1112. (flags & PM_ENABLE_IRQS)) {
  1113. /* enable interrupts as the L2 may have to be powered on */
  1114. kbase_pm_enable_interrupts(kbdev);
  1115. kbase_pm_request_l2_caches(kbdev);
  1116. /* Re-enable the counters if we need to */
  1117. spin_lock_irqsave(
  1118. &kbdev->pm.backend.gpu_cycle_counter_requests_lock,
  1119. irq_flags);
  1120. if (kbdev->pm.backend.gpu_cycle_counter_requests)
  1121. kbase_reg_write(kbdev, GPU_CONTROL_REG(GPU_COMMAND),
  1122. GPU_COMMAND_CYCLE_COUNT_START, NULL);
  1123. spin_unlock_irqrestore(
  1124. &kbdev->pm.backend.gpu_cycle_counter_requests_lock,
  1125. irq_flags);
  1126. kbase_pm_release_l2_caches(kbdev);
  1127. kbase_pm_disable_interrupts(kbdev);
  1128. }
  1129. if (flags & PM_ENABLE_IRQS)
  1130. kbase_pm_enable_interrupts(kbdev);
  1131. return 0;
  1132. }
  1133. /**
  1134. * kbase_pm_request_gpu_cycle_counter_do_request - Request cycle counters
  1135. *
  1136. * Increase the count of cycle counter users and turn the cycle counters on if
  1137. * they were previously off
  1138. *
  1139. * This function is designed to be called by
  1140. * kbase_pm_request_gpu_cycle_counter() or
  1141. * kbase_pm_request_gpu_cycle_counter_l2_is_on() only
  1142. *
  1143. * When this function is called the l2 cache must be on and the l2 cache users
  1144. * count must have been incremented by a call to (
  1145. * kbase_pm_request_l2_caches() or kbase_pm_request_l2_caches_l2_on() )
  1146. *
  1147. * @kbdev: The kbase device structure of the device
  1148. */
  1149. static void
  1150. kbase_pm_request_gpu_cycle_counter_do_request(struct kbase_device *kbdev)
  1151. {
  1152. unsigned long flags;
  1153. spin_lock_irqsave(&kbdev->pm.backend.gpu_cycle_counter_requests_lock,
  1154. flags);
  1155. ++kbdev->pm.backend.gpu_cycle_counter_requests;
  1156. if (kbdev->pm.backend.gpu_cycle_counter_requests == 1)
  1157. kbase_reg_write(kbdev, GPU_CONTROL_REG(GPU_COMMAND),
  1158. GPU_COMMAND_CYCLE_COUNT_START, NULL);
  1159. spin_unlock_irqrestore(
  1160. &kbdev->pm.backend.gpu_cycle_counter_requests_lock,
  1161. flags);
  1162. }
  1163. void kbase_pm_request_gpu_cycle_counter(struct kbase_device *kbdev)
  1164. {
  1165. KBASE_DEBUG_ASSERT(kbdev != NULL);
  1166. KBASE_DEBUG_ASSERT(kbdev->pm.backend.gpu_powered);
  1167. KBASE_DEBUG_ASSERT(kbdev->pm.backend.gpu_cycle_counter_requests <
  1168. INT_MAX);
  1169. kbase_pm_request_l2_caches(kbdev);
  1170. kbase_pm_request_gpu_cycle_counter_do_request(kbdev);
  1171. }
  1172. void kbase_pm_request_gpu_cycle_counter_l2_is_on(struct kbase_device *kbdev)
  1173. {
  1174. KBASE_DEBUG_ASSERT(kbdev != NULL);
  1175. KBASE_DEBUG_ASSERT(kbdev->pm.backend.gpu_powered);
  1176. KBASE_DEBUG_ASSERT(kbdev->pm.backend.gpu_cycle_counter_requests <
  1177. INT_MAX);
  1178. kbase_pm_request_l2_caches_l2_is_on(kbdev);
  1179. kbase_pm_request_gpu_cycle_counter_do_request(kbdev);
  1180. }
  1181. void kbase_pm_release_gpu_cycle_counter(struct kbase_device *kbdev)
  1182. {
  1183. unsigned long flags;
  1184. KBASE_DEBUG_ASSERT(kbdev != NULL);
  1185. spin_lock_irqsave(&kbdev->pm.backend.gpu_cycle_counter_requests_lock,
  1186. flags);
  1187. KBASE_DEBUG_ASSERT(kbdev->pm.backend.gpu_cycle_counter_requests > 0);
  1188. --kbdev->pm.backend.gpu_cycle_counter_requests;
  1189. if (kbdev->pm.backend.gpu_cycle_counter_requests == 0)
  1190. kbase_reg_write(kbdev, GPU_CONTROL_REG(GPU_COMMAND),
  1191. GPU_COMMAND_CYCLE_COUNT_STOP, NULL);
  1192. spin_unlock_irqrestore(
  1193. &kbdev->pm.backend.gpu_cycle_counter_requests_lock,
  1194. flags);
  1195. kbase_pm_release_l2_caches(kbdev);
  1196. }