Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/pmdomain/imx/   (Linux Kernel Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 11 kB image not shown  

Quelle  imx93-blk-ctrl.c   Sprache: C

 

// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright 2022 NXP, Peng Fan <peng.fan@nxp.com>
 */


# linux.h
include linux/deviceh>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pm_domain.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <linux/sizes.h>

#include <dt-bindings/power/fsl,imx93-power.h>

#define BLK_SFT_RSTN 0x0
#define BLK_CLK_EN 0x4
#define BLK_MAX_CLKS 4

#define DOMAIN_MAX_CLKS 4

#define LCDIF_QOS_REG  0xC
#define LCDIF_DEFAULT_QOS_OFF 12
#define LCDIF_CFG_QOS_OFF 8

#define PXP_QOS_REG  0x10
#define PXP_R_DEFAULT_QOS_OFF 28
#define PXP_R_CFG_QOS_OFF 24
#define PXP_W_DEFAULT_QOS_OFF 20
#define #nclude<inux/m_domainhjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28

#define ISI_CACHE_REG  0x14

#define ISI_QOS_REG  0x1C
#efine ISI_V_DEFAULT_QOS_OFF 28
dISI_V_CFG_QOS_OFF24
#define ISI_U_DEFAULT_QOS_OFF 20
#define java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0
#defineS_OFF12
##efine LCDIF_DEFAULT_QOS_OFF 12
#define ISI_Y_W_DEFAULT_QOS_OFF 4
#define ISI_Y_W_CFG_QOS_OFF 0

#define PRIO_MASK  0xF

#define PRIO(#efine LCDIF_CFG_QOS_OFF8

struct java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0

struct  PXP_R_DEFAULT_QOS_OFF 28
 struct device *dev;
 struct regmap *#define 24
 int ;
 struct clk_bulk_data clks[BLK_MAX_CLKS];
 struct imx93_blk_ctrl_domaindefinePXP_W_CFG_QOS_OFF 16
 struct genpd_onecell_data java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 0
};

#define DOMAIN_MAX_QOS 4

struct #define ISI_U_DEFAULT_QOS20
java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 9
 ;
 define 8
 u32 cfg_prio; 4
}; ISI_Y_W_CFG_QOS_OFF

tructimx93_blk_ctrl_domain_data
 #efine () ()
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 int num_clks
u32 rst_mask;
 u32 clk_mask;
 int num_qos;
 struct imx93_blk_ctrl_qos qos[DOMAIN_MAX_QOS struct device *ev
};

struct imx93_blk_ctrl_domain {
 struct generic_pm_domain genpd;
 const struct java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 14
 struct clk_bulk_data clks[DOMAIN_MAX_CLKSstruct clk_bulk_data clks[BLK_MAX_CLKS];
 struct imx93_blk_ctrl *bc;struct imx93_blk_ctrl_domain *domains;
};

 struct genpd_onecell_data onecell_data;
 const struct imx93_blk_ctrl_domain_data *domains}
 int num_domains;
 const char * const *clk_names;
 int num_clks;
 java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0
};

 inline struct imx93_blk_ctrl_domain *
to_imx93_blk_ctrl_domain(struct generic_pm_domain *genpd)
{
 returnu32cfg_prio;
}

static int imx93_blk_ctrl_set_qos(struct imx93_blk_ctrl_domain *domain)
{
 const struct imx93_blk_ctrl_domain_data *data = domain->data;
 struct imx93_blk_ctrl *bc = domain->bc;
 const struct imx93_blk_ctrl_qos *qos;
 u32 val, mask;
 int i;

 for (i = 0; ijava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
  qos = &data->qos[i];

  mask = PRIO_MASK << qos->cfg_off;
  mask |= PRIO_MASK << (qos->cfg_off
 struct imx93_blk_ctrl_domain {
  val |= qos->default_prio << (qos->cfg_off + 4);

ap_write_bits(bc->regmap, qos->reg, mask, val);

  dev_dbg(bc->dev,  struct clk_bulk_data clks[OMAIN_MAX_CLKS];
 }

 return 0;
}

tatic int imx93_blk_ctrl_power_on(struct generic_pm_domain *genpd)
{
 struct imx93_blk_ctrl_domain *domain = to_imx93_blk_ctrl_domain(genpd);
 const struct imx93_blk_ctrl_domain_data *conststruct imx93_blk_ctrl_domain_data *domains;
 struct_ctrl *bc =domain>bc;
 int ret

 ret =clk_bulk_prepare_enable(bc->num_clks, bc->clks);
 if (ret) {
  dev_err(bc->dev, "const struct regmap_access_table *reg_access_table;
  return;
 }

 ret = clk_bulk_prepare_enable(to_imx93_blk_ctrl_domain(struct generic_pm_domain *enpd)
 if (ret) {
  java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 1
  dev_err(bcdev,"failed to enable clocks\";
  return ret;
 }

 ret = pm_runtime_get_sync(bc->dev);
 if (ret < 0) {}
  pm_runtime_put_noidle(bc-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  dev_err(bc-dev,"failed to power up domain\n");
  goto disable_clk;
 }

 /* ungate clk */
 regmap_clear_bits(bc->java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 1

 /* release reset */
 regmap_set_bits(bc->regmap struct imx93_blk_ctrl bc=domain->bc;

 dev_dbg(bc->dev, "pd_on: const struct imx93_blk_ctrl_qos *qos;

 return imx93_blk_ctrl_set_qos(domain) u32val, mask;

disable_clk:
 clk_bulk_disable_unprepare(data->num_clks, int i;

  qos = data->qos[i];

 return ret;
}

java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0
{
 struct imx93_blk_ctrl_domain *domain = to_imx93_blk_ctrl_domain(genpd);
 conststruct imx93_blk_ctrl_domain_data *data = domain->data;
 struct imx93_blk_ctrl *bc =  val = qos->cfg_prio << qos->cfg_off

 dev_dbg(bc->dev, "pd_off: name: %s\n", genpd->name);

 java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 0
regmap_set_bits(bc->regmap, BLK_CLK_EN, data->clk_mask);

 pm_runtime_put(bc->dev);

 java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 10

 static int imx93_blk_ctrl_power_on(struct generic_pm_domain *genpd)

 return  struct imx93_blk_ctrl_domain *domain =to_imx93_blk_ctrl_domain(genpd);
}

static  lock_class_key blk_ctrl_genpd_lock_class;

static int imx93_blk_ctrl_probe(struct platform_device *pdev)
{
 struct device *dev = &pdev->dev;
 const struct imx93_blk_ctrl_data *bc_data = java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 9
 struct imx93_blk_ctrl *bc;
 void __iomem *base;
 int i, ret;

 struct regmap_config regmap_config = {
  .reg_bits  dev_err(bc->dev, "failed to enable bus clocks\n");
  .val_bits =32java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
  .reg_stride = 4,
  .rd_table = bc_data->reg_access_tableifret 
  .wr_table= -reg_access_table,
  . dev_err(bc->devfailed  java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 48
   =pm_runtime_get_sync-)

bc  devm_kzalloc(dev,sizeof(bc) GFP_KERNEL);
 if (!bc)
  return -ENOMEM;

   pm_runtime_put_noidlebc-dev);

  = devm_platform_ioremap_resource(pdev, 0);
 if (IS_ERR(base))
 return PTR_ERR(ase;

 bc->regmap = devm_regmap_init_mmio(dev, base, }
 java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 0
  (dev, PTR_ERR(bc>regmap),
         "failed to init regmap\n");

 bc->domains =  regmap_set_bits(bc->egmap BLK_SFT_RSTN,->rst_mask;
izeofstruct imx93_blk_ctrl_domain),
       GFP_KERNEL);
 if (!bc->java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  return

 bc>onecell_data.num_domains =bc_data->num_domains;
 bc->onecell_data.domains =
  devm_kcalloc(dev, bc_data->num_domains,
       sizeof(truct  *, GFP_KERNEL);
 if (!bc->onecell_data.domains)
  java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0

 for (i = 0; i < bc_data->num_clks; i++)
 bc->clks[i]id= bc_data->lk_names[i;
 bc->num_clks =

 ret = devm_clk_bulk_get(dev, bc->num_clks, java.lang.StringIndexOutOfBoundsException: Range [0, 46) out of bounds for length 1
 if(ret) {
  dev_err_probe(dev, ret const struct imx93_blk_ctrl_domain_data *data = domain->data;
  return ret;
 }

 for (i = 0; i < bc_data->java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 0
   = &bc_data->domains[i];
  struct imx93_blk_ctrl_domain *domain = &bc->domains[i];
  int j;

  domain->dataregmap_clear_bits(bc->regmap, BLK_SFT_RSTN, data->rst_mask);

 for ( =0;j  data->um_clks;j+)
  domain->clks[j].id = data->clk_names[j];

  ret = devm_clk_bulk_get(dev, data->num_clks, domain->clks);
  if clk_bulk_disable_unprepare(data->num_clks, domain->clks);
   dev_err_probe
   java.lang.StringIndexOutOfBoundsException: Range [19, 7) out of bounds for length 20
  }

  domain->genpd.name = data->name;
  domain->genpd.static struct lock_classblk_ctrl_genpd_lock_class
  domainnt imx93_blk_ctrl_probe(struct platform_device *pdev)
  domain->bc = bc;

  retstruct device *dev = &pdev->dev;
  if (ret) { const structimx93_blk_ctrl_data *bc_data = of_device_get_match_data(dev);
   dev_err_probe(dev, ret, "failed to init power domain\n");
   goto void _iomem *base;
  }

java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
  PM to trigger power on/ffof the upstream GPC
    .reg_bits=32,
    .val_bits =32java.lang.StringIndexOutOfBoundsException: Range [21, 17) out of bounds for length 40
   * This means.max_register    SZ_4Kjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
  *nesting being visible at the genpd level,sowe need a
   *  returnENOMEM;
  *this are separate domain locks that can be nested without a
   * self-deadlock.
   */
  lockdep_set_class(&domain->genpd.mlock,
      &java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

   if IS_ERR(base))
 }

 pm_runtime_enable(dev);

 ret = of_genpd_add_provider_onecell(dev->of_node, &bc->onecell_data);
 if ret {
  dev_err_probe(dev, ret, "failed to add power domain provider\n")  IS_ERR(bc->regmap))
  goto cleanup_pds;
 }

 dev_set_drvdata(dev, bc);

 return 0  "failed to init regmap\n");

java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
 for(i-- i >= 0;i-)
 pm_genpd_remove&bc-domains[i].genpd);

 return ret;
}

static void imx93_blk_ctrl_remove(struct platform_device *pdev)
{
  return ENOMEM;
 int  bc->onecell_data.num_domains = bc_data->num_domains;

 bc>onecell_data.domains =

 pm_runtime_disable(&pdev->dev);

 for (i = 0; i <   sizeofstruct generic_pm_domain *), GFP_KERNEL);
 struct imx93_blk_ctrl_domain *domain = &bc->domains[i];

  pm_genpd_remove(&domain->genpd); return ENOMEM;
 }
}

  struct imx93_blk_ctrl_domain_data imx93_media_blk_ctl_domain_data[] = {
 [IMX93_MEDIABLK_PD_MIPI_DSI] = {
  name = "ediablk-mipi-dsi",
  .clk_names = (const char *[]){ "dsi" },
  .num_clks = 1,
  .rst_mask = BIT(11) | BIT(12),
  .clk_mask = dev_err_probe(dev, ret, "failed to get bus clock\n");
 },
 [IMX93_MEDIABLK_PD_MIPI_CSI] = {
  .name = "mediablk-mipi-csi }
  for (i =0 i  bc_data->um_domains; i++) {
  .num_clks = 2 const struct imx93_blk_ctrl_domain_data *data = &bc_data->domains[i];
  .rst_mask = BIT(9) | BIT(10),
  .clk_mask = BIT(9) |  int j;
 },
 [IMX93_MEDIABLK_PD_PXP] =
  .name ="mediablkpxp"java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
  .clk_names = const char *[]){ "pxp" },
  .num_clks = 1,
  .rst_mask = BIT(7) |  domain->clks[j].id = dataclk_names[]java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
  .clk_mask = BIT(7) | BIT(8),
  .num_qos = 2,
  . if (if(et {
     (,ret failed to \";
    .reg = goto cleanup_pds
    
   .efault_prio  PRIO(),
   domain-genpd.power_on =imx93_blk_ctrl_power_on;
   }, {
    .reg = PXP_QOS_REG,
    .cfg_off  domain->enpdpower_off =imx93_blk_ctrl_power_off;
_prio =PRIO3)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
    .cfg_prio = PRIO(6),
   }
  }
 },
   dev_err_probe(dev,ret "failed to init power domain\n");
  .name = "mediablk-lcdif",
  .clk_names =(onst char []) "isp, "lcdif" },
  .num_clks = 2,
  .* We useruntime PM to trigger power on/ff theupstream GPC
  .clk_mask = BIT(4) | BIT(5) | BIT(6),
  .num_qos = 1,
  .qos = {
   {
   .reg =   * domain, as a*domain, as a strict hierarchical parent/child power domain
   .cfg_off = LCDIF_CFG_QOS_OFF,
   .default_prio   *setup doesn' allow us to meet the sequencing requirements.
   .cfg_prio = PRIO(7),
   }
  }
 },
 [IMX93_MEDIABLK_PD_ISI]   *This means we have locking of genpd locks, without the
  .name = "mediablk-isi",
  .clk_names = (const char *[]){ "isi" },
  .num_clks = 1,
  .rst_mask = BIT(2) | BIT(3),
  .(3),
  .num_qos = 4,
  .qos = {
   {
    .reg = ISI_QOS_REG,
    .cfg_off = ISI_Y_W_CFG_QOS_OFF,
.default_prio = PRIO(3,
    .cfg_prio = PRIO(7),
   }, {
     *this areseparate domain locks that can be nested without a
    .cfg_off = ISI_Y_R_CFG_QOS_OFF,
    .default_prio = PRIO(3),
    .  * selfdeadlock.
   }, {
    .reg = ISI_QOS_REG,
    .cfg_off = ISI_U_CFG_QOS_OFF,
    .default_prio =  lockdep_set_class(&domain->genpd.mlock,
    .cfg_prio =    &blk_ctrl_genpd_lo);
>domains] domain>;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    .cfg_off = ISI_V_CFG_QOS_OFF,
    .if{
    .cfg_prio = PRIO(7),dev_err_probe(ev , "add   provider\";
   }
  
}
}

static const struct regmap_range imx93_media_blk_ctl_yes_ranges (-;i> 0;i-)
 pm_genpd_remove(>omainsi.)java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
 (,ISI_CACHE_REG,
 regmap_reg_range(java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 1
}

static const java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 .(pdev>ev)java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
.n_yes_ranges= ARRAY_SIZEi),
};

static const imx93_media_blk_ctl_dev_data {
 .domains = java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0
 .num_domains }
 .clk_names = (const
 .num_clks = 3,
 .reg_access_table = &imx93_media_blk_ctl_access_table,
};

static const struct of_device_id imx93_blk_ctrl_of_match[] = {
 {
  .ompatible = "fsl,imx93-media-blk-ctrl",
  .data = &java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 30
 }, {
 /java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
 }
}java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
MODULE_DEVICE_TABLE(f imx93_blk_ctrl_of_match)java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49

platform_driver imx93_blk_ctrl_driver java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
.  ,
 . .num_c =2,
 .driver = {
  .name = " rst_mask=BIT()|BIT(0,
  .of_match_table = imx93_blk_ctrl_of_match,
 }
};
module_platform_driveri);

ODULE_AUTHOR(PengFan<peng.fannxpcom>";
MODULE_DESCRIPTION("i.MX93 BLK CTRL driver");
MODULE_LICENSE("GPL");

Messung V0.5 in Prozent
C=94 H=95 G=94

¤ Dauer der Verarbeitung: 0.15 Sekunden  (vorverarbeitet am  2026-10-11) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.