sdhci-msm-scaling.h 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  4. */
  5. #ifndef _DRIVERS_MMC_SDHCI_MSM_SCALING_H
  6. #define _DRIVERS_MMC_SDHCI_MSM_SCALING_H
  7. #include <linux/devfreq.h>
  8. #include "sdhci-msm.h"
  9. #include "../core/queue.h"
  10. #include "../core/host.h"
  11. #include "../core/mmc_ops.h"
  12. #include "../core/core.h"
  13. struct sdhci_msm_host;
  14. enum sdhci_msm_mmc_load;
  15. #define MMC_READ_SINGLE_BLOCK 17 /* adtc [31:0] data addr R1 */
  16. #define MMC_READ_MULTIPLE_BLOCK 18 /* adtc [31:0] data addr R1 */
  17. #define MMC_WRITE_BLOCK 24 /* adtc [31:0] data addr R1 */
  18. #define MMC_WRITE_MULTIPLE_BLOCK 25 /* adtc R1 */
  19. #define MMC_DEVFRQ_DEFAULT_UP_THRESHOLD 35
  20. #define MMC_DEVFRQ_DEFAULT_DOWN_THRESHOLD 5
  21. #define MMC_DEVFRQ_DEFAULT_POLLING_MSEC 100
  22. extern int mmc_select_bus_width(struct mmc_card *card);
  23. extern int mmc_select_hs(struct mmc_card *card);
  24. extern int mmc_select_hs_ddr(struct mmc_card *card);
  25. extern int mmc_select_hs400(struct mmc_card *card);
  26. extern int mmc_hs200_tuning(struct mmc_card *card);
  27. extern int mmc_select_hs200(struct mmc_card *card);
  28. extern int mmc_select_timing(struct mmc_card *card);
  29. void sdhci_msm_scale_parse_dt(struct device *dev, struct sdhci_msm_host *msm_host);
  30. void sdhci_msm_mmc_deferred_scaling(struct sdhci_msm_host *host);
  31. void _sdhci_msm_mmc_cqe_clk_scaling_start_busy(struct mmc_queue *mq,
  32. struct sdhci_msm_host *host, bool lock_needed);
  33. void _sdhci_msm_mmc_cqe_clk_scaling_stop_busy(struct sdhci_msm_host *host,
  34. bool lock_needed, int is_cqe_dcmd);
  35. int _sdhci_msm_mmc_exit_clk_scaling(struct sdhci_msm_host *host);
  36. int _sdhci_msm_mmc_suspend_clk_scaling(struct sdhci_msm_host *host);
  37. int _sdhci_msm_mmc_resume_clk_scaling(struct sdhci_msm_host *host);
  38. int _sdhci_msm_mmc_init_clk_scaling(struct sdhci_msm_host *host);
  39. bool sdhci_msm_mmc_is_data_request(u32 opcode);
  40. void _sdhci_msm_mmc_clk_scaling_start_busy(struct sdhci_msm_host *host, bool lock_needed);
  41. void _sdhci_msm_mmc_clk_scaling_stop_busy(struct sdhci_msm_host *host, bool lock_needed);
  42. struct mmc_card;
  43. struct mmc_queue;
  44. void sdhci_msm_update_curr_part(struct mmc_host *host, unsigned int part_type);
  45. void sdhci_msm_dec_active_req(struct mmc_host *host);
  46. void sdhci_msm_inc_active_req(struct mmc_host *host);
  47. void sdhci_msm_is_dcmd(int data, int *err);
  48. extern void sdhci_msm_mmc_cqe_clk_scaling_stop_busy(struct mmc_host *host, struct mmc_request *mrq);
  49. extern void sdhci_msm_mmc_cqe_clk_scaling_start_busy(struct mmc_host *host,
  50. struct mmc_request *mrq);
  51. void sdhci_msm_set_active_reqs(struct mmc_host *host);
  52. void sdhci_msm_set_factors(struct mmc_host *host);
  53. void sdhci_msm_mmc_init_setup_scaling(struct mmc_card *card, struct mmc_host *host);
  54. void sdhci_msm_mmc_exit_clk_scaling(struct mmc_host *host);
  55. void sdhci_msm_mmc_suspend_clk_scaling(struct mmc_host *host);
  56. void sdhci_msm_mmc_resume_clk_scaling(struct mmc_host *host);
  57. void sdhci_msm_mmc_init_clk_scaling(struct mmc_host *host);
  58. void sdhci_msm_cqe_scaling_resume(struct mmc_host *host);
  59. bool sdhci_msm_mmc_can_scale_clk(struct sdhci_msm_host *msm_host);
  60. int sdhci_msm_mmc_clk_update_freq(struct sdhci_msm_host *host,
  61. unsigned long freq, enum sdhci_msm_mmc_load state);
  62. #endif