1b45b5bacSMarek Vasut /* 2b45b5bacSMarek Vasut * Copyright (c) 2021-2025, Renesas Electronics Corporation. All rights reserved. 3b45b5bacSMarek Vasut * 4b45b5bacSMarek Vasut * SPDX-License-Identifier: BSD-3-Clause 5b45b5bacSMarek Vasut */ 6b45b5bacSMarek Vasut 7b45b5bacSMarek Vasut #include <stddef.h> 8b45b5bacSMarek Vasut #include <stdint.h> 9b45b5bacSMarek Vasut 10b45b5bacSMarek Vasut #include <drivers/console.h> 11b45b5bacSMarek Vasut #include <lib/mmio.h> 12b45b5bacSMarek Vasut #include <lib/utils_def.h> 13b45b5bacSMarek Vasut #include "scif.h" 14b45b5bacSMarek Vasut 15b45b5bacSMarek Vasut #include "rcar_def.h" 16b45b5bacSMarek Vasut 17*13e1e761SMarek Vasut /* CPG */ 18*13e1e761SMarek Vasut #define CPG_BASE 0xE6150000UL 19*13e1e761SMarek Vasut #define CPG_CPGWPR (CPG_BASE + 0x0000UL) 20*13e1e761SMarek Vasut #define CPG_CPGWPCR (CPG_BASE + 0x0004UL) 21*13e1e761SMarek Vasut #define CPG_MSTPCR5 (CPG_BASE + 0x2D14UL) 22*13e1e761SMarek Vasut #define CPG_MSTPSR5 (CPG_BASE + 0x2E14UL) 23*13e1e761SMarek Vasut #define CPG_MSTPSR5_HSCIF0 BIT(14) 24*13e1e761SMarek Vasut #define CPG_MSTPCR7 (CPG_BASE + 0x2D1CUL) 25*13e1e761SMarek Vasut #define CPG_MSTPSR7 (CPG_BASE + 0x2E1CUL) 26*13e1e761SMarek Vasut #define CPG_MSTPSR7_SCIF0 BIT(2) 27*13e1e761SMarek Vasut #define CPG_MSTPSR7_SCIF3 BIT(4) 28*13e1e761SMarek Vasut 29b45b5bacSMarek Vasut /* RST */ 30b45b5bacSMarek Vasut #define RST_BASE (0xE6160000UL + (RCAR_DOMAIN * 0x4000UL)) 31b45b5bacSMarek Vasut #define RST_MODEMR0 RST_BASE 32b45b5bacSMarek Vasut #define RST_MODEMR1 (RST_BASE + 4UL) 33b45b5bacSMarek Vasut #define RST_MODEMR0_MD31 BIT(31) 34b45b5bacSMarek Vasut #define RST_MODEMR1_MD32 BIT(0) 35b45b5bacSMarek Vasut 36b45b5bacSMarek Vasut /* SCIF/HSCIF */ 37b45b5bacSMarek Vasut #define SCIF0_BASE 0xE6E60000UL 38b45b5bacSMarek Vasut #define SCIF3_BASE 0xE6C50000UL 39b45b5bacSMarek Vasut #define HSCIF0_BASE 0xE6540000UL 40b45b5bacSMarek Vasut 41b45b5bacSMarek Vasut /* SCIF */ 42b45b5bacSMarek Vasut #if (RCAR_LSI == RCAR_S4) /* S4 */ 43b45b5bacSMarek Vasut #define SCIF_BASE SCIF3_BASE 44*13e1e761SMarek Vasut #define CPG_MSTPSR7_BIT CPG_MSTPSR7_SCIF3 45b45b5bacSMarek Vasut #else 46b45b5bacSMarek Vasut #define SCIF_BASE SCIF0_BASE 47*13e1e761SMarek Vasut #define CPG_MSTPSR7_BIT CPG_MSTPSR7_SCIF0 48b45b5bacSMarek Vasut #endif 49b45b5bacSMarek Vasut #define SCIF_SCFTDR (SCIF_BASE + 0x000CU) /* 8 Transmit FIFO data register */ 50b45b5bacSMarek Vasut #define SCIF_SCFSR (SCIF_BASE + 0x0010U) /* 16 Serial status register */ 51b45b5bacSMarek Vasut 52b45b5bacSMarek Vasut /* HSCIF */ 53b45b5bacSMarek Vasut #define HSCIF_BASE HSCIF0_BASE 54b45b5bacSMarek Vasut #define HSCIF_HSFTDR (HSCIF_BASE + 0x000CU) /* 8 Transmit FIFO data register */ 55b45b5bacSMarek Vasut #define HSCIF_HSFSR (HSCIF_BASE + 0x0010U) /* 16 Serial status register */ 56b45b5bacSMarek Vasut 57b45b5bacSMarek Vasut /* Mode */ 58b45b5bacSMarek Vasut #define MODEMR_SCIF_DLMODE 0U 59b45b5bacSMarek Vasut #define MODEMR_HSCIF_DLMODE_921600 1U 60b45b5bacSMarek Vasut #define MODEMR_HSCIF_DLMODE_1843200 2U 61b45b5bacSMarek Vasut #define MODEMR_HSCIF_DLMODE_3000000 3U 62b45b5bacSMarek Vasut 63b45b5bacSMarek Vasut int console_rcar_init(uintptr_t base_addr, uint32_t uart_clk, 64b45b5bacSMarek Vasut uint32_t baud_rate) 65b45b5bacSMarek Vasut { 66*13e1e761SMarek Vasut uint32_t modemr, mstpcr, mstpsr, mstpbit; 67b45b5bacSMarek Vasut 68b45b5bacSMarek Vasut modemr = ((mmio_read_32(RST_MODEMR0) & RST_MODEMR0_MD31) >> 31U) | 69b45b5bacSMarek Vasut ((mmio_read_32(RST_MODEMR1) & RST_MODEMR1_MD32) << 1U); 70b45b5bacSMarek Vasut 71b21216f7SMarek Vasut if (modemr == MODEMR_HSCIF_DLMODE_3000000 || 72b21216f7SMarek Vasut modemr == MODEMR_HSCIF_DLMODE_1843200 || 73b21216f7SMarek Vasut modemr == MODEMR_HSCIF_DLMODE_921600) { 74*13e1e761SMarek Vasut mstpcr = CPG_MSTPCR5; 75*13e1e761SMarek Vasut mstpsr = CPG_MSTPSR5; 76*13e1e761SMarek Vasut mstpbit = CPG_MSTPSR5_HSCIF0; 77b21216f7SMarek Vasut scif_console_set_regs(HSCIF_HSFSR, HSCIF_HSFTDR); 78b21216f7SMarek Vasut } else { 79*13e1e761SMarek Vasut mstpcr = CPG_MSTPCR7; 80*13e1e761SMarek Vasut mstpsr = CPG_MSTPSR7; 81*13e1e761SMarek Vasut mstpbit = CPG_MSTPSR7_BIT; 82b21216f7SMarek Vasut scif_console_set_regs(SCIF_SCFSR, SCIF_SCFTDR); 83b21216f7SMarek Vasut } 84b45b5bacSMarek Vasut 85*13e1e761SMarek Vasut /* Turn SCIF/HSCIF clock ON. */ 86*13e1e761SMarek Vasut mmio_clrbits_32(mstpcr, mstpbit); 87*13e1e761SMarek Vasut while (mmio_read_32(mstpsr) & mstpbit) 88*13e1e761SMarek Vasut ; 89*13e1e761SMarek Vasut 90b45b5bacSMarek Vasut return 1; 91b45b5bacSMarek Vasut } 92