Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: m-labs/misoc
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: dba6189e389a
Choose a base ref
...
head repository: m-labs/misoc
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: a0f0285bb9ab
Choose a head ref
  • 3 commits
  • 3 files changed
  • 2 contributors

Commits on Sep 8, 2013

  1. videomixer: handle HPD

    Sebastien Bourdeauducq committed Sep 8, 2013
    Copy the full SHA
    52be94f View commit details
  2. dvisampler: reset PLL at startup

    Sebastien Bourdeauducq committed Sep 8, 2013
    Copy the full SHA
    d0edb7e View commit details
  3. lasmicon/multiplexer: fix rdcmdphase/wrcmdphase inversion

    enjoy-digital authored and Sebastien Bourdeauducq committed Sep 8, 2013
    Copy the full SHA
    a0f0285 View commit details
Showing with 36 additions and 16 deletions.
  1. +1 −1 milkymist/dvisampler/clocking.py
  2. +2 −2 milkymist/lasmicon/multiplexer.py
  3. +33 −13 software/videomixer/dvisamplerX.c
2 changes: 1 addition & 1 deletion milkymist/dvisampler/clocking.py
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@

class Clocking(Module, AutoCSR):
def __init__(self, pads):
self._r_pll_reset = CSRStorage()
self._r_pll_reset = CSRStorage(reset=1)
self._r_locked = CSRStatus()

self.locked = Signal()
4 changes: 2 additions & 2 deletions milkymist/lasmicon/multiplexer.py
Original file line number Diff line number Diff line change
@@ -162,12 +162,12 @@ def steerer_sel(steerer, phy_settings, r_w_n):
if r_w_n == "read":
if i == phy_settings.rdphase:
s = steerer.sel[i].eq(STEER_REQ)
elif i == phy_settings.wrcmdphase:
elif i == phy_settings.rdcmdphase:
s = steerer.sel[i].eq(STEER_CMD)
elif r_w_n == "write":
if i == phy_settings.wrphase:
s = steerer.sel[i].eq(STEER_REQ)
elif i == phy_settings.rdcmdphase:
elif i == phy_settings.wrcmdphase:
s = steerer.sel[i].eq(STEER_CMD)
else:
raise ValueError
46 changes: 33 additions & 13 deletions software/videomixer/dvisamplerX.c
Original file line number Diff line number Diff line change
@@ -44,6 +44,8 @@ void dvisamplerX_init_video(void)
{
unsigned int mask;

dvisamplerX_clocking_pll_reset_write(1);

dvisamplerX_dma_ev_pending_write(dvisamplerX_dma_ev_pending_read());
dvisamplerX_dma_ev_enable_write(0x3);
mask = irq_getmask();
@@ -224,27 +226,45 @@ static void dvisamplerX_check_overflow(void)
}
}

static int dvisamplerX_connected;
static int dvisamplerX_locked;
static int dvisamplerX_last_event;

void dvisamplerX_service(void)
{
if(dvisamplerX_locked) {
if(dvisamplerX_clocking_locked_read()) {
if(elapsed(&dvisamplerX_last_event, identifier_frequency_read()/2)) {
dvisamplerX_adjust_phase();
dvisamplerX_print_status();
}
} else {
printf("dvisamplerX: lost PLL lock\n");
if(dvisamplerX_connected) {
if(!dvisamplerX_edid_hpd_notif_read()) {
printf("dvisamplerX: disconnected\n");
dvisamplerX_connected = 0;
dvisamplerX_locked = 0;
dvisamplerX_clocking_pll_reset_write(1);
dvisamplerX_edid_hpd_en_write(0);
} else {
if(dvisamplerX_locked) {
if(dvisamplerX_clocking_locked_read()) {
if(elapsed(&dvisamplerX_last_event, identifier_frequency_read()/2)) {
dvisamplerX_adjust_phase();
dvisamplerX_print_status();
}
} else {
printf("dvisamplerX: lost PLL lock\n");
dvisamplerX_locked = 0;
}
} else {
if(dvisamplerX_clocking_locked_read()) {
printf("dvisamplerX: PLL locked\n");
dvisamplerX_phase_startup();
dvisamplerX_print_status();
dvisamplerX_locked = 1;
}
}
}
} else {
if(dvisamplerX_clocking_locked_read()) {
printf("dvisamplerX: PLL locked\n");
dvisamplerX_phase_startup();
dvisamplerX_print_status();
dvisamplerX_locked = 1;
if(dvisamplerX_edid_hpd_notif_read()) {
printf("dvisamplerX: connected\n");
dvisamplerX_connected = 1;
dvisamplerX_edid_hpd_en_write(1);
dvisamplerX_clocking_pll_reset_write(0);
}
}
dvisamplerX_check_overflow();