Lines Matching refs:group

81 static int32_t GpioDumperCreate(struct Pl061GpioGroup *group)
93 GPIO_DUMPER_NAME_PREFIX, group->index) < 0) {
104 group->dumper = dumper;
105 group->dumperName = name;
110 static void GpioDumperDump(struct Pl061GpioGroup *group)
114 {"PL061_GPIO_DIR", PLATFORM_DUMPER_REGISTERB, (void *)(PL061_GPIO_DIR(group->regBase))},
115 {"PL061_GPIO_IS", PLATFORM_DUMPER_REGISTERB, (void *)(PL061_GPIO_IS(group->regBase))},
116 {"PL061_GPIO_IBE", PLATFORM_DUMPER_REGISTERB, (void *)(PL061_GPIO_IBE(group->regBase))},
117 {"PL061_GPIO_IEV", PLATFORM_DUMPER_REGISTERB, (void *)(PL061_GPIO_IEV(group->regBase))},
118 {"PL061_GPIO_IE", PLATFORM_DUMPER_REGISTERB, (void *)(PL061_GPIO_IE(group->regBase))},
119 {"PL061_GPIO_RIS", PLATFORM_DUMPER_REGISTERB, (void *)(PL061_GPIO_RIS(group->regBase))},
120 {"PL061_GPIO_MIS", PLATFORM_DUMPER_REGISTERB, (void *)(PL061_GPIO_MIS(group->regBase))},
121 {"PL061_GPIO_IC", PLATFORM_DUMPER_REGISTERB, (void *)(PL061_GPIO_IC(group->regBase))},
124 if (group->dumper == NULL) {
125 HDF_LOGE("%s: group dumper is NULL!", __func__);
128 ret = PlatformDumperAddDatas(group->dumper, datas, sizeof(datas) / sizeof(struct PlatformDumperData));
132 (void)PlatformDumperDump(group->dumper);
133 (void)PlatformDumperClearDatas(group->dumper);
136 static inline void GpioDumperDestroy(struct Pl061GpioGroup *group)
138 PlatformDumperDestroy(group->dumper);
139 OsalMemFree(group->dumperName);
147 struct Pl061GpioGroup *group = (struct Pl061GpioGroup *)cntlr;
151 if (OsalSpinLockIrqSave(&group->lock, &group->irqSave) != HDF_SUCCESS) {
154 addr = PL061_GPIO_DIR(group->regBase);
162 (void)OsalSpinUnlockIrqRestore(&group->lock, &group->irqSave);
172 struct Pl061GpioGroup *group = (struct Pl061GpioGroup *)cntlr;
176 addr = PL061_GPIO_DIR(group->regBase);
191 struct Pl061GpioGroup *group = (struct Pl061GpioGroup *)cntlr;
193 if (OsalSpinLockIrqSave(&group->lock, &group->irqSave) != HDF_SUCCESS) {
196 addr = PL061_GPIO_DATA(group->regBase, bitNum);
204 (void)OsalSpinUnlockIrqRestore(&group->lock, &group->irqSave);
214 struct Pl061GpioGroup *group = (struct Pl061GpioGroup *)cntlr;
216 addr = PL061_GPIO_DATA(group->regBase, bitNum);
237 struct Pl061GpioGroup *group = (struct Pl061GpioGroup *)data;
243 val = OSAL_READL(PL061_GPIO_MIS(group->regBase));
244 OSAL_WRITEL(val, PL061_GPIO_IC(group->regBase));
247 GpioDumperDump(group);
250 for (i = 0; i < group->cntlr.count && val != 0; i++, val >>= 1) {
252 GpioCntlrIrqCallback(&group->cntlr, i);
258 static int32_t Pl061GpioRegisterGroupIrqUnsafe(struct Pl061GpioGroup *group)
261 if (group->irqShare == 1) {
262 ret = OsalRegisterIrq(group->irq, 0, Pl061IrqHandleShare, "GPIO", NULL);
264 HDF_LOGE("%s: share irq:%u reg fail:%d!", __func__, group->irq, ret);
267 group->irqFunc = Pl061IrqHandleShare;
269 ret = OsalRegisterIrq(group->irq, 0, Pl061IrqHandleNoShare, "GPIO", group);
271 (void)OsalUnregisterIrq(group->irq, group);
272 ret = OsalRegisterIrq(group->irq, 0, Pl061IrqHandleNoShare, "GPIO", group);
275 HDF_LOGE("%s: noshare irq:%u reg fail:%d!", __func__, group->irq, ret);
276 GpioDumperDump(group);
279 ret = OsalEnableIrq(group->irq);
281 HDF_LOGE("%s: noshare irq:%u enable fail:%d!", __func__, group->irq, ret);
282 (void)OsalUnregisterIrq(group->irq, group);
283 GpioDumperDump(group);
286 group->irqFunc = Pl061IrqHandleNoShare;
292 static void Pl061GpioClearIrqUnsafe(struct Pl061GpioGroup *group, uint16_t bitNum)
296 val = OSAL_READL(PL061_GPIO_IC(group->regBase));
298 OSAL_WRITEL(val, PL061_GPIO_IC(group->regBase));
301 static void Pl061GpioSetIrqEnableUnsafe(struct Pl061GpioGroup *group, uint16_t bitNum, int flag)
306 addr = PL061_GPIO_IE(group->regBase);
319 struct Pl061GpioGroup *group = (struct Pl061GpioGroup *)cntlr;
321 if (OsalSpinLockIrqSave(&group->lock, &group->irqSave) != HDF_SUCCESS) {
324 Pl061GpioSetIrqEnableUnsafe(group, bitNum, 1);
325 (void)OsalSpinUnlockIrqRestore(&group->lock, &group->irqSave);
332 struct Pl061GpioGroup *group = (struct Pl061GpioGroup *)cntlr;
334 if (OsalSpinLockIrqSave(&group->lock, &group->irqSave) != HDF_SUCCESS) {
337 Pl061GpioSetIrqEnableUnsafe(group, bitNum, 0);
338 (void)OsalSpinUnlockIrqRestore(&group->lock, &group->irqSave);
342 static void Pl061GpioSetIrqTypeUnsafe(struct Pl061GpioGroup *group, uint16_t bitNum, uint16_t mode)
352 gpioIs = OSAL_READL(PL061_GPIO_IS(group->regBase));
353 gpioIev = OSAL_READL(PL061_GPIO_IEV(group->regBase));
363 gpioIbe = OSAL_READL(PL061_GPIO_IBE(group->regBase));
374 OSAL_WRITEL(gpioIbe, PL061_GPIO_IBE(group->regBase));
376 OSAL_WRITEL(gpioIs, PL061_GPIO_IS(group->regBase));
377 OSAL_WRITEL(gpioIev, PL061_GPIO_IEV(group->regBase));
384 struct Pl061GpioGroup *group = (struct Pl061GpioGroup *)cntlr;
386 if (OsalSpinLockIrqSave(&group->lock, &group->irqSave) != HDF_SUCCESS) {
389 Pl061GpioSetIrqTypeUnsafe(group, bitNum, mode);
390 Pl061GpioSetIrqEnableUnsafe(group, bitNum, 0); // disable irq on set
391 Pl061GpioClearIrqUnsafe(group, bitNum); // clear irq on set
393 if (group->irqFunc != NULL) {
394 (void)OsalSpinUnlockIrqRestore(&group->lock, &group->irqSave);
395 HDF_LOGI("%s: group irq(%u) already registered!", __func__, group->irq);
398 ret = Pl061GpioRegisterGroupIrqUnsafe(group);
399 (void)OsalSpinUnlockIrqRestore(&group->lock, &group->irqSave);
400 HDF_LOGI("%s: group irq(%u) registered!", __func__, group->irq);
407 struct Pl061GpioGroup *group = (struct Pl061GpioGroup *)cntlr;
409 if (OsalSpinLockIrqSave(&group->lock, &group->irqSave) != HDF_SUCCESS) {
412 Pl061GpioSetIrqEnableUnsafe(group, bitNum, 0); // disable irq when unset
413 Pl061GpioClearIrqUnsafe(group, bitNum); // clear irq when unset
414 (void)OsalSpinUnlockIrqRestore(&group->lock, &group->irqSave);
491 struct Pl061GpioGroup *group = NULL;
494 group = &pl061->groups[i];
496 GpioCntlrRemove(&group->cntlr);
591 struct Pl061GpioGroup *group = NULL;
595 group = &pl061->groups[i];
596 HDF_LOGI("group[%hu]: index:%u, regBase:0x%x, irq:%u(cntlr:%hu:%hu)",
597 i, group->index, group->regBase, group->irq, group->cntlr.start, group->cntlr.count);