Deleted Added
full compact
am335x_prcm.c (281085) am335x_prcm.c (283276)
1/*-
2 * Copyright (c) 2012 Damjan Marion <dmarion@Freebsd.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2012 Damjan Marion <dmarion@Freebsd.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: head/sys/arm/ti/am335x/am335x_prcm.c 281085 2015-04-04 21:34:26Z andrew $");
28__FBSDID("$FreeBSD: head/sys/arm/ti/am335x/am335x_prcm.c 283276 2015-05-22 03:16:18Z gonzo $");
29
30#include <sys/param.h>
31#include <sys/systm.h>
32#include <sys/bus.h>
33#include <sys/kernel.h>
34#include <sys/module.h>
35#include <sys/malloc.h>
36#include <sys/rman.h>

--- 195 unchanged lines hidden (view full) ---

232 { .id = LCDC_CLK,
233 .clk_activate = am335x_clk_lcdc_activate,
234 .clk_deactivate = NULL,
235 .clk_set_source = NULL,
236 .clk_accessible = NULL,
237 .clk_get_source_freq = am335x_clk_get_arm_disp_freq,
238 },
239
29
30#include <sys/param.h>
31#include <sys/systm.h>
32#include <sys/bus.h>
33#include <sys/kernel.h>
34#include <sys/module.h>
35#include <sys/malloc.h>
36#include <sys/rman.h>

--- 195 unchanged lines hidden (view full) ---

232 { .id = LCDC_CLK,
233 .clk_activate = am335x_clk_lcdc_activate,
234 .clk_deactivate = NULL,
235 .clk_set_source = NULL,
236 .clk_accessible = NULL,
237 .clk_get_source_freq = am335x_clk_get_arm_disp_freq,
238 },
239
240 /* UART. Uart0 clock cannot be controlled. */
241 AM335X_NOOP_CLOCK_DEV(UART0_CLK),
242 AM335X_GENERIC_CLOCK_DEV(UART1_CLK),
240 /* UART */
241 AM335X_NOOP_CLOCK_DEV(UART1_CLK),
243 AM335X_GENERIC_CLOCK_DEV(UART2_CLK),
244 AM335X_GENERIC_CLOCK_DEV(UART3_CLK),
245 AM335X_GENERIC_CLOCK_DEV(UART4_CLK),
246 AM335X_GENERIC_CLOCK_DEV(UART5_CLK),
242 AM335X_GENERIC_CLOCK_DEV(UART2_CLK),
243 AM335X_GENERIC_CLOCK_DEV(UART3_CLK),
244 AM335X_GENERIC_CLOCK_DEV(UART4_CLK),
245 AM335X_GENERIC_CLOCK_DEV(UART5_CLK),
246 AM335X_GENERIC_CLOCK_DEV(UART6_CLK),
247
248 /* DMTimer */
247
248 /* DMTimer */
249 AM335X_GENERIC_CLOCK_DEV(DMTIMER2_CLK),
250 AM335X_GENERIC_CLOCK_DEV(DMTIMER3_CLK),
251 AM335X_GENERIC_CLOCK_DEV(DMTIMER4_CLK),
252 AM335X_GENERIC_CLOCK_DEV(DMTIMER5_CLK),
253 AM335X_GENERIC_CLOCK_DEV(DMTIMER6_CLK),
254 AM335X_GENERIC_CLOCK_DEV(DMTIMER7_CLK),
249 AM335X_GENERIC_CLOCK_DEV(TIMER2_CLK),
250 AM335X_GENERIC_CLOCK_DEV(TIMER3_CLK),
251 AM335X_GENERIC_CLOCK_DEV(TIMER4_CLK),
252 AM335X_GENERIC_CLOCK_DEV(TIMER5_CLK),
253 AM335X_GENERIC_CLOCK_DEV(TIMER6_CLK),
254 AM335X_GENERIC_CLOCK_DEV(TIMER7_CLK),
255
255
256 /* GPIO */
257 AM335X_GPIO_CLOCK_DEV(GPIO0_CLK),
256 /* GPIO, we use hwmods as reference, not units in spec */
258 AM335X_GPIO_CLOCK_DEV(GPIO1_CLK),
259 AM335X_GPIO_CLOCK_DEV(GPIO2_CLK),
260 AM335X_GPIO_CLOCK_DEV(GPIO3_CLK),
257 AM335X_GPIO_CLOCK_DEV(GPIO1_CLK),
258 AM335X_GPIO_CLOCK_DEV(GPIO2_CLK),
259 AM335X_GPIO_CLOCK_DEV(GPIO3_CLK),
260 AM335X_GPIO_CLOCK_DEV(GPIO4_CLK),
261
261
262 /* I2C */
263 AM335X_GENERIC_CLOCK_DEV(I2C0_CLK),
262 /* I2C we use hwmods as reference, not units in spec */
264 AM335X_GENERIC_CLOCK_DEV(I2C1_CLK),
265 AM335X_GENERIC_CLOCK_DEV(I2C2_CLK),
263 AM335X_GENERIC_CLOCK_DEV(I2C1_CLK),
264 AM335X_GENERIC_CLOCK_DEV(I2C2_CLK),
265 AM335X_GENERIC_CLOCK_DEV(I2C3_CLK),
266
267 /* TSC_ADC */
268 AM335X_GENERIC_CLOCK_DEV(TSC_ADC_CLK),
269
270 /* EDMA */
271 AM335X_GENERIC_CLOCK_DEV(EDMA_TPCC_CLK),
272 AM335X_GENERIC_CLOCK_DEV(EDMA_TPTC0_CLK),
273 AM335X_GENERIC_CLOCK_DEV(EDMA_TPTC1_CLK),
274 AM335X_GENERIC_CLOCK_DEV(EDMA_TPTC2_CLK),
275
276 /* MMCHS */
266
267 /* TSC_ADC */
268 AM335X_GENERIC_CLOCK_DEV(TSC_ADC_CLK),
269
270 /* EDMA */
271 AM335X_GENERIC_CLOCK_DEV(EDMA_TPCC_CLK),
272 AM335X_GENERIC_CLOCK_DEV(EDMA_TPTC0_CLK),
273 AM335X_GENERIC_CLOCK_DEV(EDMA_TPTC1_CLK),
274 AM335X_GENERIC_CLOCK_DEV(EDMA_TPTC2_CLK),
275
276 /* MMCHS */
277 AM335X_MMCHS_CLOCK_DEV(MMC0_CLK),
278 AM335X_MMCHS_CLOCK_DEV(MMC1_CLK),
279 AM335X_MMCHS_CLOCK_DEV(MMC2_CLK),
277 AM335X_MMCHS_CLOCK_DEV(MMC1_CLK),
278 AM335X_MMCHS_CLOCK_DEV(MMC2_CLK),
279 AM335X_MMCHS_CLOCK_DEV(MMC3_CLK),
280
281 /* PWMSS */
282 AM335X_GENERIC_CLOCK_DEV(PWMSS0_CLK),
283 AM335X_GENERIC_CLOCK_DEV(PWMSS1_CLK),
284 AM335X_GENERIC_CLOCK_DEV(PWMSS2_CLK),
285
286 /* System Mailbox clock */
287 AM335X_GENERIC_CLOCK_DEV(MAILBOX0_CLK),

--- 26 unchanged lines hidden (view full) ---

314 { .id = (i), \
315 .clkctrl_reg = (c), \
316 .clksel_reg = (s), \
317 }
318
319static struct am335x_clk_details g_am335x_clk_details[] = {
320
321 /* UART. UART0 clock not controllable. */
280
281 /* PWMSS */
282 AM335X_GENERIC_CLOCK_DEV(PWMSS0_CLK),
283 AM335X_GENERIC_CLOCK_DEV(PWMSS1_CLK),
284 AM335X_GENERIC_CLOCK_DEV(PWMSS2_CLK),
285
286 /* System Mailbox clock */
287 AM335X_GENERIC_CLOCK_DEV(MAILBOX0_CLK),

--- 26 unchanged lines hidden (view full) ---

314 { .id = (i), \
315 .clkctrl_reg = (c), \
316 .clksel_reg = (s), \
317 }
318
319static struct am335x_clk_details g_am335x_clk_details[] = {
320
321 /* UART. UART0 clock not controllable. */
322 _CLK_DETAIL(UART0_CLK, 0, 0),
323 _CLK_DETAIL(UART1_CLK, CM_PER_UART1_CLKCTRL, 0),
324 _CLK_DETAIL(UART2_CLK, CM_PER_UART2_CLKCTRL, 0),
325 _CLK_DETAIL(UART3_CLK, CM_PER_UART3_CLKCTRL, 0),
326 _CLK_DETAIL(UART4_CLK, CM_PER_UART4_CLKCTRL, 0),
327 _CLK_DETAIL(UART5_CLK, CM_PER_UART5_CLKCTRL, 0),
322 _CLK_DETAIL(UART1_CLK, 0, 0),
323 _CLK_DETAIL(UART2_CLK, CM_PER_UART1_CLKCTRL, 0),
324 _CLK_DETAIL(UART3_CLK, CM_PER_UART2_CLKCTRL, 0),
325 _CLK_DETAIL(UART4_CLK, CM_PER_UART3_CLKCTRL, 0),
326 _CLK_DETAIL(UART5_CLK, CM_PER_UART4_CLKCTRL, 0),
327 _CLK_DETAIL(UART6_CLK, CM_PER_UART5_CLKCTRL, 0),
328
329 /* DMTimer modules */
328
329 /* DMTimer modules */
330 _CLK_DETAIL(DMTIMER2_CLK, CM_PER_TIMER2_CLKCTRL, CLKSEL_TIMER2_CLK),
331 _CLK_DETAIL(DMTIMER3_CLK, CM_PER_TIMER3_CLKCTRL, CLKSEL_TIMER3_CLK),
332 _CLK_DETAIL(DMTIMER4_CLK, CM_PER_TIMER4_CLKCTRL, CLKSEL_TIMER4_CLK),
333 _CLK_DETAIL(DMTIMER5_CLK, CM_PER_TIMER5_CLKCTRL, CLKSEL_TIMER5_CLK),
334 _CLK_DETAIL(DMTIMER6_CLK, CM_PER_TIMER6_CLKCTRL, CLKSEL_TIMER6_CLK),
335 _CLK_DETAIL(DMTIMER7_CLK, CM_PER_TIMER7_CLKCTRL, CLKSEL_TIMER7_CLK),
330 _CLK_DETAIL(TIMER2_CLK, CM_PER_TIMER2_CLKCTRL, CLKSEL_TIMER2_CLK),
331 _CLK_DETAIL(TIMER3_CLK, CM_PER_TIMER3_CLKCTRL, CLKSEL_TIMER3_CLK),
332 _CLK_DETAIL(TIMER4_CLK, CM_PER_TIMER4_CLKCTRL, CLKSEL_TIMER4_CLK),
333 _CLK_DETAIL(TIMER5_CLK, CM_PER_TIMER5_CLKCTRL, CLKSEL_TIMER5_CLK),
334 _CLK_DETAIL(TIMER6_CLK, CM_PER_TIMER6_CLKCTRL, CLKSEL_TIMER6_CLK),
335 _CLK_DETAIL(TIMER7_CLK, CM_PER_TIMER7_CLKCTRL, CLKSEL_TIMER7_CLK),
336
336
337 /* GPIO modules */
338 _CLK_DETAIL(GPIO0_CLK, CM_WKUP_GPIO0_CLKCTRL, 0),
339 _CLK_DETAIL(GPIO1_CLK, CM_PER_GPIO1_CLKCTRL, 0),
340 _CLK_DETAIL(GPIO2_CLK, CM_PER_GPIO2_CLKCTRL, 0),
341 _CLK_DETAIL(GPIO3_CLK, CM_PER_GPIO3_CLKCTRL, 0),
337 /* GPIO modules, hwmods start with gpio1 */
338 _CLK_DETAIL(GPIO1_CLK, CM_WKUP_GPIO0_CLKCTRL, 0),
339 _CLK_DETAIL(GPIO2_CLK, CM_PER_GPIO1_CLKCTRL, 0),
340 _CLK_DETAIL(GPIO3_CLK, CM_PER_GPIO2_CLKCTRL, 0),
341 _CLK_DETAIL(GPIO4_CLK, CM_PER_GPIO3_CLKCTRL, 0),
342
342
343 /* I2C modules */
344 _CLK_DETAIL(I2C0_CLK, CM_WKUP_I2C0_CLKCTRL, 0),
345 _CLK_DETAIL(I2C1_CLK, CM_PER_I2C1_CLKCTRL, 0),
346 _CLK_DETAIL(I2C2_CLK, CM_PER_I2C2_CLKCTRL, 0),
343 /* I2C modules, hwmods start with i2c1 */
344 _CLK_DETAIL(I2C1_CLK, CM_WKUP_I2C0_CLKCTRL, 0),
345 _CLK_DETAIL(I2C2_CLK, CM_PER_I2C1_CLKCTRL, 0),
346 _CLK_DETAIL(I2C3_CLK, CM_PER_I2C2_CLKCTRL, 0),
347
348 /* TSC_ADC module */
349 _CLK_DETAIL(TSC_ADC_CLK, CM_WKUP_ADC_TSC_CLKCTRL, 0),
350
351 /* EDMA modules */
352 _CLK_DETAIL(EDMA_TPCC_CLK, CM_PER_TPCC_CLKCTRL, 0),
353 _CLK_DETAIL(EDMA_TPTC0_CLK, CM_PER_TPTC0_CLKCTRL, 0),
354 _CLK_DETAIL(EDMA_TPTC1_CLK, CM_PER_TPTC1_CLKCTRL, 0),
355 _CLK_DETAIL(EDMA_TPTC2_CLK, CM_PER_TPTC2_CLKCTRL, 0),
356
347
348 /* TSC_ADC module */
349 _CLK_DETAIL(TSC_ADC_CLK, CM_WKUP_ADC_TSC_CLKCTRL, 0),
350
351 /* EDMA modules */
352 _CLK_DETAIL(EDMA_TPCC_CLK, CM_PER_TPCC_CLKCTRL, 0),
353 _CLK_DETAIL(EDMA_TPTC0_CLK, CM_PER_TPTC0_CLKCTRL, 0),
354 _CLK_DETAIL(EDMA_TPTC1_CLK, CM_PER_TPTC1_CLKCTRL, 0),
355 _CLK_DETAIL(EDMA_TPTC2_CLK, CM_PER_TPTC2_CLKCTRL, 0),
356
357 /* MMCHS modules*/
358 _CLK_DETAIL(MMC0_CLK, CM_PER_MMC0_CLKCTRL, 0),
359 _CLK_DETAIL(MMC1_CLK, CM_PER_MMC1_CLKCTRL, 0),
357 /* MMCHS modules, hwmods start with mmc1*/
358 _CLK_DETAIL(MMC1_CLK, CM_PER_MMC0_CLKCTRL, 0),
360 _CLK_DETAIL(MMC2_CLK, CM_PER_MMC1_CLKCTRL, 0),
359 _CLK_DETAIL(MMC2_CLK, CM_PER_MMC1_CLKCTRL, 0),
360 _CLK_DETAIL(MMC3_CLK, CM_PER_MMC1_CLKCTRL, 0),
361
362 /* PWMSS modules */
363 _CLK_DETAIL(PWMSS0_CLK, CM_PER_EPWMSS0_CLKCTRL, 0),
364 _CLK_DETAIL(PWMSS1_CLK, CM_PER_EPWMSS1_CLKCTRL, 0),
365 _CLK_DETAIL(PWMSS2_CLK, CM_PER_EPWMSS2_CLKCTRL, 0),
366
367 _CLK_DETAIL(MAILBOX0_CLK, CM_PER_MAILBOX0_CLKCTRL, 0),
368 _CLK_DETAIL(SPINLOCK0_CLK, CM_PER_SPINLOCK0_CLKCTRL, 0),

--- 14 unchanged lines hidden (view full) ---

383
384static int
385am335x_prcm_probe(device_t dev)
386{
387
388 if (!ofw_bus_status_okay(dev))
389 return (ENXIO);
390
361
362 /* PWMSS modules */
363 _CLK_DETAIL(PWMSS0_CLK, CM_PER_EPWMSS0_CLKCTRL, 0),
364 _CLK_DETAIL(PWMSS1_CLK, CM_PER_EPWMSS1_CLKCTRL, 0),
365 _CLK_DETAIL(PWMSS2_CLK, CM_PER_EPWMSS2_CLKCTRL, 0),
366
367 _CLK_DETAIL(MAILBOX0_CLK, CM_PER_MAILBOX0_CLKCTRL, 0),
368 _CLK_DETAIL(SPINLOCK0_CLK, CM_PER_SPINLOCK0_CLKCTRL, 0),

--- 14 unchanged lines hidden (view full) ---

383
384static int
385am335x_prcm_probe(device_t dev)
386{
387
388 if (!ofw_bus_status_okay(dev))
389 return (ENXIO);
390
391 if (ofw_bus_is_compatible(dev, "am335x,prcm")) {
391 if (ofw_bus_is_compatible(dev, "ti,am3-prcm")) {
392 device_set_desc(dev, "AM335x Power and Clock Management");
393 return(BUS_PROBE_DEFAULT);
394 }
395
396 return (ENXIO);
397}
398
399static int

--- 11 unchanged lines hidden (view full) ---

411 }
412
413 sc->bst = rman_get_bustag(sc->res[0]);
414 sc->bsh = rman_get_bushandle(sc->res[0]);
415
416 am335x_prcm_sc = sc;
417 ti_cpu_reset = am335x_prcm_reset;
418
392 device_set_desc(dev, "AM335x Power and Clock Management");
393 return(BUS_PROBE_DEFAULT);
394 }
395
396 return (ENXIO);
397}
398
399static int

--- 11 unchanged lines hidden (view full) ---

411 }
412
413 sc->bst = rman_get_bustag(sc->res[0]);
414 sc->bsh = rman_get_bushandle(sc->res[0]);
415
416 am335x_prcm_sc = sc;
417 ti_cpu_reset = am335x_prcm_reset;
418
419 am335x_clk_get_sysclk_freq(NULL, &sysclk);
420 am335x_clk_get_arm_fclk_freq(NULL, &fclk);
421 device_printf(dev, "Clocks: System %u.%01u MHz, CPU %u MHz\n",
422 sysclk/1000000, (sysclk % 1000000)/100000, fclk/1000000);
419 if (am335x_clk_get_sysclk_freq(NULL, &sysclk) != 0)
420 sysclk = 0;
421 if (am335x_clk_get_arm_fclk_freq(NULL, &fclk) != 0)
422 fclk = 0;
423 if (sysclk && fclk)
424 device_printf(dev, "Clocks: System %u.%01u MHz, CPU %u MHz\n",
425 sysclk/1000000, (sysclk % 1000000)/100000, fclk/1000000);
426 else
427 device_printf(dev, "can't read frequencies yet (SCM device not ready?)\n");
423
424 return (0);
425}
426
427static device_method_t am335x_prcm_methods[] = {
428 DEVMETHOD(device_probe, am335x_prcm_probe),
429 DEVMETHOD(device_attach, am335x_prcm_attach),
430 { 0, 0 }

--- 367 unchanged lines hidden ---
428
429 return (0);
430}
431
432static device_method_t am335x_prcm_methods[] = {
433 DEVMETHOD(device_probe, am335x_prcm_probe),
434 DEVMETHOD(device_attach, am335x_prcm_attach),
435 { 0, 0 }

--- 367 unchanged lines hidden ---