static void __etb_disable(void) { int count; uint32_t ffcr; ETB_UNLOCK(); ffcr = etb_readl(etb, ETB_FFCR); ffcr |= (BIT(12) | BIT(6)); etb_writel(etb, ffcr, ETB_FFCR); for (count = TIMEOUT_US; BVAL(etb_readl(etb, ETB_FFCR), 6) != 0 && count > 0; count--) udelay(1); WARN(count == 0, "timeout while flushing ETB, ETB_FFCR: %#x\n", etb_readl(etb, ETB_FFCR)); etb_writel(etb, 0x0, ETB_CTL_REG); for (count = TIMEOUT_US; BVAL(etb_readl(etb, ETB_FFSR), 1) != 1 && count > 0; count--) udelay(1); WARN(count == 0, "timeout while disabling ETB, ETB_FFSR: %#x\n", etb_readl(etb, ETB_FFSR)); ETB_LOCK(); }
static void __etb_dump(void) { int i; uint8_t *buf_ptr; uint32_t read_data; uint32_t read_ptr; uint32_t write_ptr; ETB_UNLOCK(); read_ptr = etb_readl(etb, ETB_RAM_READ_POINTER); write_ptr = etb_readl(etb, ETB_RAM_WRITE_POINTER); if ((etb_readl(etb, ETB_STATUS_REG) & BIT(0)) == 0) etb_writel(etb, 0x0, ETB_RAM_READ_POINTER); else etb_writel(etb, write_ptr, ETB_RAM_READ_POINTER); buf_ptr = etb.buf; for (i = 0; i < ETB_SIZE_WORDS; i++) { read_data = etb_readl(etb, ETB_RAM_READ_DATA_REG); *buf_ptr = read_data >> 0; buf_ptr++; *buf_ptr = read_data >> 8; buf_ptr++; *buf_ptr = read_data >> 16; buf_ptr++; *buf_ptr = read_data >> 24; buf_ptr++; } etb_writel(etb, read_ptr, ETB_RAM_READ_POINTER); ETB_LOCK(); }
static void __etb_disable(void) { int count; uint32_t ffcr; /* Avoid oopsing in panic() if called before the device is probed. */ if (!etb.base) return; ETB_UNLOCK(); ffcr = etb_readl(etb, ETB_FFCR); ffcr |= (BIT(12) | BIT(6)); etb_writel(etb, ffcr, ETB_FFCR); for (count = TIMEOUT_US; BVAL(etb_readl(etb, ETB_FFCR), 6) != 0 && count > 0; count--) udelay(1); WARN(count == 0, "timeout while flushing ETB, ETB_FFCR: %#x\n", etb_readl(etb, ETB_FFCR)); etb_writel(etb, 0x0, ETB_CTL_REG); for (count = TIMEOUT_US; BVAL(etb_readl(etb, ETB_FFSR), 1) != 1 && count > 0; count--) udelay(1); WARN(count == 0, "timeout while disabling ETB, ETB_FFSR: %#x\n", etb_readl(etb, ETB_FFSR)); ETB_LOCK(); }
static void __etb_dump(void) { int i; uint8_t *buf_ptr; uint32_t read_data; uint32_t read_ptr; uint32_t write_ptr; uint32_t frame_off; uint32_t frame_endoff; ETB_UNLOCK(); read_ptr = etb_readl(etb, ETB_RAM_READ_POINTER); write_ptr = etb_readl(etb, ETB_RAM_WRITE_POINTER); frame_off = write_ptr % FRAME_SIZE_WORDS; frame_endoff = FRAME_SIZE_WORDS - frame_off; if (frame_off) { dev_err(etb.dev, "write_ptr: %lu not aligned to formatter " "frame size\n", (unsigned long)write_ptr); dev_err(etb.dev, "frameoff: %lu, frame_endoff: %lu\n", (unsigned long)frame_off, (unsigned long)frame_endoff); write_ptr += frame_endoff; } if ((etb_readl(etb, ETB_STATUS_REG) & BIT(0)) == 0) etb_writel(etb, 0x0, ETB_RAM_READ_POINTER); else etb_writel(etb, write_ptr, ETB_RAM_READ_POINTER); buf_ptr = etb.buf; for (i = 0; i < ETB_SIZE_WORDS; i++) { read_data = etb_readl(etb, ETB_RAM_READ_DATA_REG); *buf_ptr++ = read_data >> 0; *buf_ptr++ = read_data >> 8; *buf_ptr++ = read_data >> 16; *buf_ptr++ = read_data >> 24; } if (frame_off) { buf_ptr -= (frame_endoff * BYTES_PER_WORD); for (i = 0; i < frame_endoff; i++) { *buf_ptr++ = 0x0; *buf_ptr++ = 0x0; *buf_ptr++ = 0x0; *buf_ptr++ = 0x0; } } etb_writel(etb, read_ptr, ETB_RAM_READ_POINTER); ETB_LOCK(); }
static void __etb_disable(void) { int count; ETB_UNLOCK(); etb_writel(etb, BIT(12) | BIT(13), ETB_FFCR); etb_writel(etb, 0x0, ETB_CTL_REG); for (count = TIMEOUT_US; BVAL(etb_readl(etb, ETB_FFSR), 1) != 1 && count > 0; count--) udelay(1); WARN(count == 0, "timeout while disabling etb\n"); ETB_LOCK(); }
static void __etb_enable(void) { int i; ETB_UNLOCK(); etb_writel(etb, 0x0, ETB_RAM_WRITE_POINTER); for (i = 0; i < ETB_SIZE_WORDS; i++) etb_writel(etb, 0x0, ETB_RWD_REG); etb_writel(etb, 0x0, ETB_RAM_WRITE_POINTER); etb_writel(etb, 0x0, ETB_RAM_READ_POINTER); etb_writel(etb, BIT(13) | BIT(0), ETB_FFCR); etb_writel(etb, BIT(0), ETB_CTL_REG); ETB_LOCK(); }
static void __etb_enable(struct etb_drvdata *drvdata) { int i; ETB_UNLOCK(drvdata); etb_writel(drvdata, 0x0, ETB_RAM_WRITE_POINTER); for (i = 0; i < ETB_SIZE_WORDS; i++) etb_writel(drvdata, 0x0, ETB_RWD_REG); etb_writel(drvdata, 0x0, ETB_RAM_WRITE_POINTER); etb_writel(drvdata, 0x0, ETB_RAM_READ_POINTER); etb_writel(drvdata, drvdata->trigger_cntr, ETB_TRG); etb_writel(drvdata, BIT(13) | BIT(0), ETB_FFCR); etb_writel(drvdata, BIT(0), ETB_CTL_REG); ETB_LOCK(drvdata); }