Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 27 Jan 2017 11:57:33 +0100
From:      Michal Meloun <melounmichal@gmail.com>
To:        Wojciech Macek <wma@FreeBSD.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r312743 - head/sys/dev/cesa
Message-ID:  <06845374-0a4d-dc59-ee6f-39f76422a445@freebsd.org>
In-Reply-To: <201701251022.v0PAM70M046189@repo.freebsd.org>
References:  <201701251022.v0PAM70M046189@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
This breaks DB-88F6XXX kernel with:

--- cesa.o ---
...
/usr2/Meloun/git/tegra/sys/dev/cesa/cesa.c:960:57: error: use of
undeclared identifier 'CESA_SA_CMD_SHA2'
                CESA_REG_WRITE(sc, CESA_SA_CMD, CESA_SA_CMD_ACTVATE |
CESA_SA_CMD_SHA2);
                                                                      ^
/usr2/Meloun/git/tegra/sys/dev/cesa/cesa.c:1209:10: error: use of
undeclared identifier 'CESA_TDMA_NUM_OUTSTAND'
                val |= CESA_TDMA_NUM_OUTSTAND;
                       ^
2 errors generated.
*** [cesa.o] Error code 1

Michal


On 25.01.2017 11:22, Wojciech Macek wrote:
> Author: wma
> Date: Wed Jan 25 10:22:07 2017
> New Revision: 312743
> URL: https://svnweb.freebsd.org/changeset/base/312743
> 
> Log:
>   Use SoC ID - based detection in CESA
>   
>   This commit introduces following changes in order to get rid of
>   ifdef's from all around the driver.
>   * Introduce sc_soc_id field in cesa_softc structure - this value is
>     obtained in cesa_attach() anyway, so make use of it.
>   * Replace ifdefs with SoC ID checks.
>   * Perform PM control status only for relevant SoC's.
>   
>   Submitted by:          Marcin Wojtas <mw@semihalf.com>
>   Obtained from:         Semihalf
>   Sponsored by:          Stormshield
>   Reviewed by:           zbb
>   Differential revision: https://reviews.freebsd.org/D9247
> 
> Modified:
>   head/sys/dev/cesa/cesa.c
>   head/sys/dev/cesa/cesa.h
> 
> Modified: head/sys/dev/cesa/cesa.c
> ==============================================================================
> --- head/sys/dev/cesa/cesa.c	Wed Jan 25 07:51:53 2017	(r312742)
> +++ head/sys/dev/cesa/cesa.c	Wed Jan 25 10:22:07 2017	(r312743)
> @@ -953,11 +953,13 @@ cesa_execute(struct cesa_softc *sc)
>  	ctd = STAILQ_FIRST(&cr->cr_tdesc);
>  
>  	CESA_TDMA_WRITE(sc, CESA_TDMA_ND, ctd->ctd_cthd_paddr);
> -#if defined (SOC_MV_ARMADA38X)
> -	CESA_REG_WRITE(sc, CESA_SA_CMD, CESA_SA_CMD_ACTVATE | CESA_SA_CMD_SHA2);
> -#else
> -	CESA_REG_WRITE(sc, CESA_SA_CMD, CESA_SA_CMD_ACTVATE);
> -#endif
> +
> +	if (sc->sc_soc_id == MV_DEV_88F6828 ||
> +	    sc->sc_soc_id == MV_DEV_88F6820 ||
> +	    sc->sc_soc_id == MV_DEV_88F6810)
> +		CESA_REG_WRITE(sc, CESA_SA_CMD, CESA_SA_CMD_ACTVATE | CESA_SA_CMD_SHA2);
> +	else
> +		CESA_REG_WRITE(sc, CESA_SA_CMD, CESA_SA_CMD_ACTVATE);
>  
>  	CESA_UNLOCK(sc, requests);
>  }
> @@ -968,6 +970,7 @@ cesa_setup_sram(struct cesa_softc *sc)
>  	phandle_t sram_node;
>  	ihandle_t sram_ihandle;
>  	pcell_t sram_handle, sram_reg[2];
> +	void *sram_va;
>  	int rv;
>  
>  	rv = OF_getencprop(ofw_bus_get_node(sc->sc_dev), "sram-handle",
> @@ -986,15 +989,17 @@ cesa_setup_sram(struct cesa_softc *sc)
>  	/* Store SRAM size to be able to unmap in detach() */
>  	sc->sc_sram_size = sram_reg[1];
>  
> -#if defined(SOC_MV_ARMADA38X)
> -	void *sram_va;
> +	if (sc->sc_soc_id != MV_DEV_88F6828 &&
> +	    sc->sc_soc_id != MV_DEV_88F6820 &&
> +	    sc->sc_soc_id != MV_DEV_88F6810)
> +		return (0);
>  
>  	/* SRAM memory was not mapped in platform_sram_devmap(), map it now */
>  	sram_va = pmap_mapdev(sc->sc_sram_base_pa, sc->sc_sram_size);
>  	if (sram_va == NULL)
>  		return (ENOMEM);
>  	sc->sc_sram_base_va = (vm_offset_t)sram_va;
> -#endif
> +
>  	return (0);
>  }
>  
> @@ -1018,7 +1023,7 @@ static int
>  cesa_attach(device_t dev)
>  {
>  	struct cesa_softc *sc;
> -	uint32_t d, r;
> +	uint32_t d, r, val;
>  	int error;
>  	int i;
>  
> @@ -1027,23 +1032,19 @@ cesa_attach(device_t dev)
>  	sc->sc_error = 0;
>  	sc->sc_dev = dev;
>  
> -	/* Check if CESA peripheral device has power turned on */
> -#if defined(SOC_MV_KIRKWOOD)
> -	if (soc_power_ctrl_get(CPU_PM_CTRL_CRYPTO) == CPU_PM_CTRL_CRYPTO) {
> -		device_printf(dev, "not powered on\n");
> -		return (ENXIO);
> -	}
> -#else
> -	if (soc_power_ctrl_get(CPU_PM_CTRL_CRYPTO) != CPU_PM_CTRL_CRYPTO) {
> -		device_printf(dev, "not powered on\n");
> -		return (ENXIO);
> -	}
> -#endif
>  	soc_id(&d, &r);
>  
>  	switch (d) {
>  	case MV_DEV_88F6281:
>  	case MV_DEV_88F6282:
> +		/* Check if CESA peripheral device has power turned on */
> +		if (soc_power_ctrl_get(CPU_PM_CTRL_CRYPTO) ==
> +		    CPU_PM_CTRL_CRYPTO) {
> +			device_printf(dev, "not powered on\n");
> +			return (ENXIO);
> +		}
> +		sc->sc_tperr = 0;
> +		break;
>  	case MV_DEV_88F6828:
>  	case MV_DEV_88F6820:
>  	case MV_DEV_88F6810:
> @@ -1051,12 +1052,20 @@ cesa_attach(device_t dev)
>  		break;
>  	case MV_DEV_MV78100:
>  	case MV_DEV_MV78100_Z0:
> +		/* Check if CESA peripheral device has power turned on */
> +		if (soc_power_ctrl_get(CPU_PM_CTRL_CRYPTO) !=
> +		    CPU_PM_CTRL_CRYPTO) {
> +			device_printf(dev, "not powered on\n");
> +			return (ENXIO);
> +		}
>  		sc->sc_tperr = CESA_ICR_TPERR;
>  		break;
>  	default:
>  		return (ENXIO);
>  	}
>  
> +	sc->sc_soc_id = d;
> +
>  	/* Initialize mutexes */
>  	mtx_init(&sc->sc_sc_lock, device_get_nameunit(dev),
>  	    "CESA Shared Data", MTX_DEF);
> @@ -1191,12 +1200,15 @@ cesa_attach(device_t dev)
>  	 * - Outstanding reads enabled,
>  	 * - No byte-swap.
>  	 */
> -	CESA_TDMA_WRITE(sc, CESA_TDMA_CR, CESA_TDMA_CR_DBL128 |
> -	    CESA_TDMA_CR_SBL128 | CESA_TDMA_CR_ORDEN | CESA_TDMA_CR_NBS |
> -#if defined (SOC_MV_ARMADA38X)
> -	    CESA_TDMA_NUM_OUTSTAND |
> -#endif
> -	    CESA_TDMA_CR_ENABLE);
> +	val = CESA_TDMA_CR_DBL128 | CESA_TDMA_CR_SBL128 |
> +	    CESA_TDMA_CR_ORDEN | CESA_TDMA_CR_NBS | CESA_TDMA_CR_ENABLE;
> +
> +	if (sc->sc_soc_id == MV_DEV_88F6828 ||
> +	    sc->sc_soc_id == MV_DEV_88F6820 ||
> +	    sc->sc_soc_id == MV_DEV_88F6810)
> +		val |= CESA_TDMA_NUM_OUTSTAND;
> +
> +	CESA_TDMA_WRITE(sc, CESA_TDMA_CR, val);
>  
>  	/*
>  	 * Initialize SA:
> @@ -1248,9 +1260,10 @@ err4:
>  err3:
>  	bus_teardown_intr(dev, sc->sc_res[RES_CESA_IRQ], sc->sc_icookie);
>  err2:
> -#if defined(SOC_MV_ARMADA38X)
> -	pmap_unmapdev(sc->sc_sram_base_va, sc->sc_sram_size);
> -#endif
> +	if (sc->sc_soc_id == MV_DEV_88F6828 ||
> +	    sc->sc_soc_id == MV_DEV_88F6820 ||
> +	    sc->sc_soc_id == MV_DEV_88F6810)
> +		pmap_unmapdev(sc->sc_sram_base_va, sc->sc_sram_size);
>  err1:
>  	bus_release_resources(dev, cesa_res_spec, sc->sc_res);
>  err0:
> @@ -1298,10 +1311,12 @@ cesa_detach(device_t dev)
>  	/* Relase I/O and IRQ resources */
>  	bus_release_resources(dev, cesa_res_spec, sc->sc_res);
>  
> -#if defined(SOC_MV_ARMADA38X)
>  	/* Unmap SRAM memory */
> -	pmap_unmapdev(sc->sc_sram_base_va, sc->sc_sram_size);
> -#endif
> +	if (sc->sc_soc_id == MV_DEV_88F6828 ||
> +	    sc->sc_soc_id == MV_DEV_88F6820 ||
> +	    sc->sc_soc_id == MV_DEV_88F6810)
> +		pmap_unmapdev(sc->sc_sram_base_va, sc->sc_sram_size);
> +
>  	/* Destroy mutexes */
>  	mtx_destroy(&sc->sc_sessions_lock);
>  	mtx_destroy(&sc->sc_requests_lock);
> 
> Modified: head/sys/dev/cesa/cesa.h
> ==============================================================================
> --- head/sys/dev/cesa/cesa.h	Wed Jan 25 07:51:53 2017	(r312742)
> +++ head/sys/dev/cesa/cesa.h	Wed Jan 25 10:22:07 2017	(r312743)
> @@ -231,6 +231,7 @@ struct cesa_packet {
>  struct cesa_softc {
>  	device_t			sc_dev;
>  	int32_t				sc_cid;
> +	uint32_t			sc_soc_id;
>  	struct resource			*sc_res[RES_CESA_NUM];
>  	void				*sc_icookie;
>  	bus_dma_tag_t			sc_data_dtag;
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?06845374-0a4d-dc59-ee6f-39f76422a445>